簡體   English   中英

Python(Twisted) - 從fifo讀取並將讀取數據發送到多個協議

[英]Python (Twisted) - reading from fifo and sending read data to multiple protocols

我試圖編寫某種多協議機器人(jabber / irc),它將從fifo文件(主要是一個襯里)讀取消息,然后將它們發送到irc頻道和jabber聯系人。 到目前為止,我設法創建了兩個工廠連接到jabber和irc,它們似乎正在工作。

但是,我在讀取fifo文件時遇到了問題 - 我不知道如何在循環中讀取它(打開文件,讀取行,關閉文件,跳轉到打開文件等)以獲取數據I需要發送,然后將數據傳輸到reactor環路以便在兩個協議中發送。 我一直在尋找有關如何以最佳方式做到這一點的信息,但我完全迷失在黑暗中。 任何建議/幫助將受到高度贊賞。

提前致謝!

您可以在不阻塞反應器的情況下讀取/寫入文件描述符,就像使用套接字一樣,順便說一下套接字是否使用文件描述符?

在您的情況下,創建一個實現twisted.internet.interfaces.IReadDescriptor的類,並使用twisted.internet.interfaces.IReactorFDSet.addReader添加到reactor。 有關IReadDescriptor實現的示例, IReadDescriptor查看twisted.internet.tcp.Connection

我不能更具體,因為我從未做過我的自己,但我希望這可能是一個起點。

fifo是問題所在。 請改為從套接字讀取。 這將更好地適應Twisted事件驅動模型的信息。 試圖在反應堆控制之外做事情通常是錯誤的做法。

----根據反饋更新fifo是一個外部約束,不可避免----

好的,中心問題是你不能在Twisted應用程序的主(也是唯一)線程中編寫代碼來阻止對fifo的讀取調用。 如果沒有什么可讀的話,這將導致整個應用程序停止。 所以你要么是異步讀取fifo,要么創建一個單獨的線程來讀取它,要么將應用程序分成兩部分。

最后一個選項是最簡單的 - 修改Twisted應用程序,以便它在套接字上偵聽並編寫一個單獨的小“轉發器”應用程序,該應用程序在一個簡單的循環中運行,讀取fifo並將它聽到的所有內容寫入套接字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM