【问题标题】:Python Twisted - How to send the data over the connected socket connections?Python Twisted - 如何通过连接的套接字连接发送数据?
【发布时间】:2017-07-06 08:47:15
【问题描述】:

我的服务器如下:-

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):
        self.sendMessage(payload, isBinary)

    def onClose(self, wasClean, code, reason):
        print("WebSocket connection closed: {0}".format(reason))

上面的代码接收到消息并回复相同的消息。但是,我的用例不同。

我正在处理一些数据,将其存储到数据库中,然后最终想将数据发送到连接的客户端,或者将一种类型的数据发送到特定的一组连接的客户端,将另一种类型的数据发送到另一种。

我该怎么做?如何在课堂外调用sendMessage 函数?

【问题讨论】:

    标签: python websocket twisted autobahn


    【解决方案1】:

    您需要继承 WebSocketServerFactory 以跟踪您的连接。

    看看这个example,它将所有打开的连接存储在一个列表中并向所有连接广播。您可以轻松调整它以向特定客户端发送特定消息。

    【讨论】:

    • 感谢@Henry 的回复。当我在玩代码时,我偶然发现了两种情况(怀疑)。 1)考虑我有一个API端点将数据保存在数据库中的情况。在post_save 信号(Django)中,我想将数据广播给连接的客户端。我该怎么做? 2)为什么有2个端口,即9000&8080
    • API 端点是 Django 应用程序上的 websockets 端点还是 HTTP 端点?保存数据是由 websockets 消息还是 HTTP 请求触发的?
    • 对此有什么想法吗,亨利?
    • 你有两个服务:一个 HTTP 服务和一个 websockets 服务。当某个 HTTP 请求进来时,您想要更新数据库然后广播到 websockets 客户端。一种可能的流程是让 HTTP 服务创建一个 websockets 连接,发送一条触发 websockets 服务进行广播的消息。
    【解决方案2】:

    您确定不想只使用 WAMP 而不是原始 WebSockets?

    这对于您的用例可能会容易得多,因为“向感兴趣的客户广播信息”正是发布/订阅模式的用途。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-12
      • 2010-12-10
      • 1970-01-01
      • 2010-12-30
      • 1970-01-01
      • 2014-03-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多