簡體   English   中英

覆蓋高速公路/扭曲的WebsocketClientProtocol類

[英]Override Autobahn/Twisted WebsocketClientProtocol class

我想重寫我的WebSocketClientFactory類,以允許作業隊列由傳入的數據填充。 這是我正在嘗試的連接代碼

    factory = WebSocketClientFactory("ws://localhost:7096")
    job_queue = Queue.Queue()
    factory.protocol = BridgeSocket(job_queue)
    connectWS(factory)

這是我的套接字類:

class BridgeSocket(WebSocketClientProtocol):
    def __init__(self,producer_queue):
        self.producer_queue = producer_queue

    def sendHello(self):
        self.sendMessage("hello")

    def onOpen(self):
        self.sendHello()
.....

但是我得到了錯誤

exceptions.AttributeError: BridgeSocket instance has no __call__ method

有什么方法可以在主線程和我在其中創建的WebSocket之間共享隊列。

一種選擇是做

factory = WebSocketClientFactory("ws://localhost:7096")
factory.job_queue = Queue.Queue()
factory.protocol = BridgeSocket

然后像這樣從協議中訪問共享隊列

class BridgeSocket(WebSocketClientProtocol):

    def onMessage(self, payload, isBinary):
        self.factory.job_queue.put(payload)

*旁注:您是否正在使用來自GitHub的AutobahnPython 干線 您應該使用標記版本或PyPI(0.6.5)的最新版本。*

萬一有人需要,我也嘗試了這種方法,但是Oberstet的解決方案看起來非常優雅和有效。

class BridgeSocket(WebSocketClientProtocol):

    def __init__(self,factory,job_queue):
        self.job_queue = job_queue
        self.factory=factory

class BridgeSocketClientFactory(WebSocketClientFactory):

    def __init__(self,url,job_queue):
        WebSocketClientFactory.__init__(self,url)
        self.job_queue = job_queue

    def buildProtocol(self, addr):
        return BridgeSocket(self,self.job_queue)


factory = BridgeSocketClientFactory("ws://localhost:7096",job_queue)
connectWS(factory)

暫無
暫無

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

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