【发布时间】:2013-05-01 10:21:24
【问题描述】:
我有一个服务器程序,它处理音频数据并将其传递给音频驱动程序。
服务器程序复制音频数据并在一个秒线程中将副本放入一个命名的 FIFO。
如果 FIFO 的另一端没有客户端读取也没关系,因为它只是阻塞了 FIFO 线程。
现在我想添加一个“控制”功能,例如“增加音量、加快播放速度等”。因此最终连接的客户端可以控制服务器程序。
重要的是:如果客户端最终断开连接(通过 close() 或中止),服务器已经检测到这一点,应该回到正常模式并忘记来自客户端的所有命令。
直到现在我还没有使用过套接字,所以我不确定最好的方法是什么:
按原样使用来自服务器->客户端的 FIFO,并添加一个仅用于客户端->服务器通信的套接字?
使用一个套接字流式传输服务器->客户端并从客户端->服务器发出命令(以字节格式?)
我会使用“AF_UNIX, SOCK_STREAM”作为套接字。 #2 是更好的变体吗?以及如何确定客户端是否在没有 close() 的情况下断开连接?
【问题讨论】:
-
使用多个连接来做不同的事情并不少见,例如 FTP。但是,如果协议允许,您也可以使用相同的连接来做不同的事情。