让 UPC 扫描仪通过网络自动提交脚本
Have a UPC scanner submit to a script automatically over a network
我有一个条形码扫描器,可以读取生产线上的条形码,然后将读取的 UPC 作为 I/O 设备通过以太网发送到 IP:port。
最初,构建此功能的人员预计您将拥有一台带控制器的 windows 机器,打开时将扫描写入文本文件。我不确定这对任何人有什么用,但我离题了。该系统本质上是一个键盘,它吐出到一个开放的端口。
我希望能够在检测到 return 键后触发脚本。我是 运行 rhel fedora centos 8,我假设我可以设置一个 bash 被监听端口的东西调用。
我是一名软件开发人员,服务器配置不是我通常使用的。经过大量谷歌搜索后,我仍然不确定以下内容:
- 哪个侦听器最适合此用例,以便我缩小搜索范围?我找到了 socat 命令,但没有完全理解它。
- 如果我正在使用 socat 或任何侦听器,就此而言,我如何告诉它停止并提交到 return 上的脚本?它如何知道消息何时结束?
- 我可以让它调用 PHP 文件吗?我需要将这些读取存储到数据库中,并且 PHP 已经在服务器上,因此这似乎是最简单的选择。
感谢您提供的任何帮助。我只需要一些基础知识,这样我就可以微调我的 google 搜索。很多返回的内容是通过 Apache 设置端口 80,并且搜索只是充斥着红色鲱鱼。
您可以将 netcat 的输出直接通过管道传输到读取和处理数据的脚本(使用您喜欢的语言)。
# example: listen on port 12345 and wait for new connection if connection is closed
nc -lk 12345 | while IFS= read -r line
do
# do something with $line
printf '%s\n' "$line"
done
此脚本假设设备发送的文本数据可以逐行处理。如果设备发送 windows 行结尾,您可能需要去除 CR。
您可能还需要一些错误处理,例如如果出现问题,请重新启动整个命令。
编辑:
此答案进一步假设扫描器使用 TCP 连接发送数据并一次处理单个连接。
当脚本无法像发送数据那样快速读取和处理数据时,发送队列有时会满,发送操作应该被阻塞。这取决于扫描仪中的实现。 (扫描仪的手册可能会详细说明。)
如果扫描器使用 UDP 而不是 TCP,netcat 也可以使用 nc -ul 12345
处理。使用 UDP,如果接收方不能足够快地处理数据,数据包就会丢失。
如 https://serverfault.com/q/207683 中所述,netcat 的实现似乎略有不同。所以你可能需要检查你的版本的命令行语法。
第二次编辑:
估计处理时间不会有问题
考虑将要传入的数据量。
- 每分钟或每秒扫描多少条代码?
- 代码中存储了多少个字符?
我想总共是一个相当小的数目。
并检查处理 and/or 数据库的性能。
- 例如,编写一个脚本,将硬编码或随机数据存储在您的数据库中,类似于来自扫描仪的数据。每个minute/second可以存储多少条数据记录?
我想脚本能够处理的数据比扫描仪发送的数据多得多。
在我看来,更困难的部分是整个系统的稳定性,如果它预计 运行 永久并且该功能对您的业务至关重要。
实施应该能够检测和处理各种可能的问题并尝试恢复。 (挂起连接,挂起commands/programs,无效数据,数据库访问错误,意外终止后重新启动程序,...)
是否有必要检测扫描仪丢失或丢失的连接?
数据丢失时会发生什么。 (例如错过扫描)是否需要/可能检测到这个?
与使用像 netcat 这样的工具相比,如果您自己实现服务器,您可能会更好地控制所有细节。
我有一个条形码扫描器,可以读取生产线上的条形码,然后将读取的 UPC 作为 I/O 设备通过以太网发送到 IP:port。
最初,构建此功能的人员预计您将拥有一台带控制器的 windows 机器,打开时将扫描写入文本文件。我不确定这对任何人有什么用,但我离题了。该系统本质上是一个键盘,它吐出到一个开放的端口。
我希望能够在检测到 return 键后触发脚本。我是 运行 rhel fedora centos 8,我假设我可以设置一个 bash 被监听端口的东西调用。
我是一名软件开发人员,服务器配置不是我通常使用的。经过大量谷歌搜索后,我仍然不确定以下内容:
- 哪个侦听器最适合此用例,以便我缩小搜索范围?我找到了 socat 命令,但没有完全理解它。
- 如果我正在使用 socat 或任何侦听器,就此而言,我如何告诉它停止并提交到 return 上的脚本?它如何知道消息何时结束?
- 我可以让它调用 PHP 文件吗?我需要将这些读取存储到数据库中,并且 PHP 已经在服务器上,因此这似乎是最简单的选择。
感谢您提供的任何帮助。我只需要一些基础知识,这样我就可以微调我的 google 搜索。很多返回的内容是通过 Apache 设置端口 80,并且搜索只是充斥着红色鲱鱼。
您可以将 netcat 的输出直接通过管道传输到读取和处理数据的脚本(使用您喜欢的语言)。
# example: listen on port 12345 and wait for new connection if connection is closed
nc -lk 12345 | while IFS= read -r line
do
# do something with $line
printf '%s\n' "$line"
done
此脚本假设设备发送的文本数据可以逐行处理。如果设备发送 windows 行结尾,您可能需要去除 CR。
您可能还需要一些错误处理,例如如果出现问题,请重新启动整个命令。
编辑:
此答案进一步假设扫描器使用 TCP 连接发送数据并一次处理单个连接。 当脚本无法像发送数据那样快速读取和处理数据时,发送队列有时会满,发送操作应该被阻塞。这取决于扫描仪中的实现。 (扫描仪的手册可能会详细说明。)
如果扫描器使用 UDP 而不是 TCP,netcat 也可以使用 nc -ul 12345
处理。使用 UDP,如果接收方不能足够快地处理数据,数据包就会丢失。
如 https://serverfault.com/q/207683 中所述,netcat 的实现似乎略有不同。所以你可能需要检查你的版本的命令行语法。
第二次编辑:
估计处理时间不会有问题
考虑将要传入的数据量。
- 每分钟或每秒扫描多少条代码?
- 代码中存储了多少个字符?
我想总共是一个相当小的数目。
并检查处理 and/or 数据库的性能。
- 例如,编写一个脚本,将硬编码或随机数据存储在您的数据库中,类似于来自扫描仪的数据。每个minute/second可以存储多少条数据记录?
我想脚本能够处理的数据比扫描仪发送的数据多得多。
在我看来,更困难的部分是整个系统的稳定性,如果它预计 运行 永久并且该功能对您的业务至关重要。
实施应该能够检测和处理各种可能的问题并尝试恢复。 (挂起连接,挂起commands/programs,无效数据,数据库访问错误,意外终止后重新启动程序,...)
是否有必要检测扫描仪丢失或丢失的连接?
数据丢失时会发生什么。 (例如错过扫描)是否需要/可能检测到这个?
与使用像 netcat 这样的工具相比,如果您自己实现服务器,您可能会更好地控制所有细节。