客户端如何使用 UNIX 域套接字与另一个客户端通信?

客户端如何使用 UNIX 域套接字与另一个客户端通信?

使用 bash,我们可能会使用 netcat 得到类似的结果:

nc -lk -U /my/fifo | while read line; do
   # line => {"client_id":123}
done;

客户端发送数据如下:

echo '{"client_id":123,"data":"foo"}' | nc -U /my/fifo

客户端等待这样的数据:

echo '{"client_id":123}' | nc -U /my/fifo | while read line; do

done;

我的问题 - 如何在不涉及所有客户端的情况下将数据从一个客户端发送到另一客户端?在“服务器”上,我需要存储对每个客户端的引用,因此当我从一个客户端收到消息时,我知道将该消息转发给谁?如何存储对当前连接的客户端的引用?就像 websockets 一样,我想创建通道,注册到该通道的任何人都会收到消息。

答案1

所以事情是这样的,我想我可以这样回应客户:

echo "this is the response" | nc -lk -U /my/fifo

但重点是我如何根据客户是谁做出不同的反应?我的意思是,如果没有基于客户请求等的逻辑,你如何才能创建一些非常有用的东西?

我唯一的猜测是有两台服务器:

nc -lk -U /my/fifo1 | while read line; do

  # custom logic goes here

done > nc -lk -U /my/fifo2

然后客户端连接:

echo '{"client_id":123}' | nc -U /my/fifo1 

nc -U /my/fifo2 | while read line; do

done; 

这违背了我对 tcp 和 unix 域套接字如何与 Node.js 等一起工作的了解,但我想对于 bash 我们必须这样做?

我还认为,为了避免竞争条件,可能必须以某种方式将上述两个命令放在一个管道中。

相关内容