我有一個服務器程序處理音頻數據並將其傳遞給音頻驅動程序。什麼是更好的方法:1管道和1插座,或1插座?
服務器程序複製音頻數據並將該副本放入一個命名的FIFO中的一個秒鐘線程中。
如果在FIFO的另一端沒有客戶端讀取,則無關緊要,因爲它只是阻塞了FIFO線程。
現在我想添加一個「控制」功能,如「增加音量,播放速度更快」等。所以最終連接的客戶端可以控制服務器程序。
重要的是:如果客戶端最終斷開連接(通過close()或中止),服務器檢測到這一點並應回退到正常模式並忘記客戶端的所有命令。
我從來沒有使用插座到現在爲止,所以我不知道什麼是最好的方式:
使用FIFO從服務器 - >客戶端,因爲它是添加一個插座只爲客戶端 - >服務器通信?
使用一個插座到流服務器 - >客戶端和客戶端 - 從下達指令>服務器(以字節格式?)
我會用「AF_UNIX,SOCK_STREAM」套接字。 #2是更好的變種?我怎樣才能確定客戶端沒有關閉()連接斷開?
並不罕見使用多個連接做不同的事情,見例如FTP。但是,如果協議允許,也可以使用相同的連接來完成不同的事情。 – 2013-05-07 12:50:55