FIFO 在使用中存在问题,因为读取器和写入器都必须打开它\xe2\x80\x93,如果其中一个迟到,而另一个被阻塞在操作系统内。
\n\n我必须实现一个发布机制 \xe2\x80\x93 一个程序发布其日志,如果有人“关心”监听,即打开发布通道,他就会收到消息。如果没有人“关心”,消息就会消失,没问题。支持不超过单个侦听器 \xe2\x80\x93 也没有问题。我可以用什么?
\n您可以广播 UDP。这是发送者部分,将任何内容通过管道传输给它:
socat - UDP-DATAGRAM:127.255.255.255:50011,sourceport=50022,broadcast
Run Code Online (Sandbox Code Playgroud)
接收者使用这个,他们可以随时加入或离开聚会:
socat - UDP-LISTEN:50011,bind=127.255.255.255,sourceport=50022,reuseaddr
Run Code Online (Sandbox Code Playgroud)
注释和解释:
50011和50022是您选择的端口号。127.255.255.255表示发送者通过环回接口进行广播,如果您愿意,可以将其调整为在 LAN 中广播。bind=127.255.255.255应该将接收者限制到此接口,这样您就不必担心来自其他地方的(流氓?)UDP 数据包(如果有)。sourceport有两个原因:
reuseaddr允许多个接收器共存。reuseaddr到发送方部分,这允许您运行多个发送方。这可能会导致接收端出现交错输出,不推荐。sourceport低于1024. 大多数操作系统不会让普通用户绑定到这些端口(名称为“特权端口”);这样,即使发件人已死亡,用户也无法冒充您的发件人。然而,由普通用户运行的接收器可以使用特权端口作为其sourceport. 为了确保只有 root 可以接收,请将另一个端口(50011在我的示例中)更改为特权端口。| 归档时间: |
|
| 查看次数: |
343 次 |
| 最近记录: |