我有一個'服務器'進程產生一些日誌。我希望用戶(或其他服務)能夠查看該日誌流(如tail -f
),但我不想將這些日誌寫入文件系統。我可以在Linux上執行此操作嗎?Linux上的一對多進程間通信
我的第一次嘗試是在回送接口上使用UDP。服務器將數據包發送到端口12345上的localhost,客戶端可以綁定到該端口以接收它們。不起作用。因爲只有一個客戶端可以綁定到同一個套接字。啊!但是你可能會說使用SO_REUSE_ADDR,它允許兩個客戶端綁定到一個端口,但只有一個客戶端接收到這些消息。
接下來,我嘗試在回送接口上的UDP多播。那個沒有得到,因爲我的內核不支持在回送接口上的多播。據
ifconfig
:lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 UP LOOPBACK RUNNING MTU:65536 Metric:1 RX packets:186 errors:0 dropped:0 overruns:0 frame:0 TX packets:186 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:11904 (11.6 KiB) TX bytes:11904 (11.6 KiB)
注缺乏
MULTICAST
(或BROADCAST
,確實),上面。
有沒有人有任何想法?我可以使用命名管道或Unix域套接字來解決這個問題嗎?
我想避免任何允許(無特權)偵聽器影響(特權)服務器的內容。例如,我寧願刪除日誌而不是阻止服務器。
我在Python中完成所有這些工作,如果這樣做有任何區別的話。
在您的第一段中提出了一個問題:如果只能實時閱讀,那麼記錄的用法是什麼?什麼不把它放在一個文件中? – HuStmpHrrr
它基本上需要運行連接到客戶端的輪詢循環('select','poll','epoll'),維護活動客戶端列表,並在生成後立即發送最新日誌。可能最好使用pipe通過管道將日誌從主服務器傳遞給helper tcp/udp服務器,然後在那裏執行循環。 – HuStmpHrrr