一尘不染

BASH:从两个输入流读取的最佳架构

linux

简单的脚本在这里:

a) 不断从套接字读取并将值存储在关联数组中
b) 不断从stdin读取值并响应t / f(如果它们已存在于关联数组中)

a和b是随机事件,不以任何方式关联。

诀窍是从两个子流程访问数组(因为将流程放在后台会将其作为子流程生成)

我正在考虑最好的策略,并且出现了一些想法,但是我想知道是否有人有更好的想法:

1)
将输入从套接字重定向到stdin作为子进程,并在一个while循环中处理这两个输入(数据大小较小,小于30个字符,所以我想它们将保持原子状态?)。
2) 读取套接字,然后读取STDIN,读取时具有小的(0.1?)超时值,以模拟非阻塞I / O。
3)
更新:将套接字数据写入文件(实际上是让另一个进程将其直接写入文件),然后每次请求进入以检查该值是否存在时,处理文件中的条目,并将它们添加到文件中数组(使用文件锁定)。


阅读 203

收藏
2020-06-07

共1个答案

一尘不染

Bash不是正确的工具。通常使用select(2)poll(2)系统调用解决此问题,这使您可以同时等待多个文件描述符而无需旋转。Bash没有任何一个接口。

我建议您使用一种脚本语言,例如Python或Perl(无论您是否满意),它都可以提供select或的接口poll(例如Python的select模块)。

2020-06-07