如何通过Python Autobahn/Twisted将有效载荷发送给特定用户



我经历了许多论坛和网站,但没有找到可以解决我的问题的解决方案。

我有这个server.py文件:

from autobahn.twisted.websocket import WebSocketServerProtocol, 
WebSocketServerFactory

class MyServerProtocol(WebSocketServerProtocol):
    def onConnect(self, request):
        print("Client connecting: {0}".format(request.peer))
    def onOpen(self):
        print("WebSocket connection open.")
    def onMessage(self, payload, isBinary):
        if isBinary:
            print("Binary message received: {0} bytes".format(len(payload)))
        else:
            print("Text message received: {0}".format(payload.decode('utf8')))
            print("Text message received: {0}".format(self.peer))

        # echo back message verbatim
        self.sendMessage(payload, isBinary)
    def onClose(self, wasClean, code, reason):
        print("WebSocket connection closed: {0}".format(reason))

if __name__ == '__main__':
    import sys
    from twisted.python import log
    from twisted.internet import reactor
    log.startLogging(sys.stdout)
    factory = WebSocketServerFactory(u"ws://127.0.0.1:9000")
    factory.protocol = MyServerProtocol
    # factory.setProtocolOptions(maxConnections=2)
    # note to self: if using putChild, the child must be bytes...
    reactor.listenTCP(9000, factory)
    reactor.run()

我想做的是在内部,我想从客户端接收有效载荷,然后将有效载荷发送给另一个客户端,我不想回声将有效载荷回回到同一客户端。

目前,我可以成功接收有效载荷。但是,将有效载荷发送给其他客户的方法是什么?

我在许多网站上都看过类似的问题,但它们都没有帮助。

这是FAQ上的一个变体"我如何在一个连接上进行输入导致另一个连接导致另一个连接的输出?"

本质上,您只需要对其他连接的协议进行引用,以便在其上调用sendMessage。该引用可以在您的MyServerProtocol或工厂或其他对象上采用属性的形式。也许它将是对另一个协议实例的直接引用,或者它将是更复杂的交互的集合(列表,dict,a集合(。

有参考后,您只需将其调用sendMessage,然后消息传达给该连接,而不是self代表的连接。

相关内容

最新更新