Python websocket 客户端 - 从 python 代码向 WebSocketServer 发送消息

Posted

技术标签:

【中文标题】Python websocket 客户端 - 从 python 代码向 WebSocketServer 发送消息【英文标题】:Python websocket client - sending messages from python code to WebSocketServer 【发布时间】:2015-02-18 11:36:55 【问题描述】:

我需要将系统日志发送到浏览器,所以我有一个基于 tornado 的 websocket 服务器像这样运行。

class WSHandler(tornado.websocket.WebSocketHandler):

    def check_origin(self, origin):
        return True

    def get(self, *args, **kwargs):
        self.ip = self.get_argument('ip', None)
        self.action = self.get_argument('action', None)
        super(WSHandler, self).get(self, *args, **kwargs)

    def open(self, *args, **kwargs):

        clients.append(self)

    def on_message(self, message):

        ll = eval(message)

        for cl in clients:
            if cl.ip and cl.ip != ll.user:
                continue
            if cl.action and cl.action != ll.action:
                continue

            message = '%s %s' % (ll.action, ll.url)
            cl.write_message(message)

    def on_close(self):
        try:
            clients.remove(self)
        except ValueError:
            pass

到目前为止,我遇到的示例都围绕基于 Tornado 的服务器和基于 js 的客户端。

然而,我需要的是一种从 Python 客户端连接到这个 websocket 的简单方法,最好由 Tornado 提供支持。客户端不需要接收消息 - 只需发送它们。我以为我在这篇 SO 帖子中得到了答案,

How to run functions outside websocket loop in python (tornado)

...但是每当发生日志事件时,我都需要发送一条消息,最好是从我正在解析事件的代码中发送消息。到目前为止,我遇到的示例都围绕基于 Tornado 的服务器和基于 js 的客户端。是否有一个短而甜的基于龙卷风的客户端,它只发送消息,可以从 for 循环中调用?

【问题讨论】:

【参考方案1】:

另外,我开发了一个完整的 Tornado WebSocket 客户端/服务器示例。

https://github.com/ilkerkesen/tornado-websocket-client-example

如果您想要 WebSocket 身份验证/授权,请查看我的其他项目 trebol 和 sugar。

【讨论】:

沙赞!!我能够按照您的示例进行操作。也许我也应该在早期的帖子中,但我没有。感谢大家的帮助。【参考方案2】:

有tornad-websocket-client 项目。注意它。 也有简单的websocket-client 来发送消息。

【讨论】:

tornado-websocket-client 看起来很棒,只是我不知道如何使用它。我尝试实例化,如示例类所示,ws = HelloSocket('ws://echo.websocket.org') ws.connect() 然后使用 ws.write_message(msg),但它不会发送到服务器。无法弄清楚我做错了什么。我确实让 websocket-client 工作了......所以我已经摆脱了困境,但我希望有一些更轻量级的东西。【参考方案3】:

Tornado 包含一个 websocket 客户端:http://www.tornadoweb.org/en/stable/websocket.html#client-side-support

【讨论】:

我确实在文档中遇到过,但不知道如何使用它。在野外没有遇到任何例子。如何实例化客户端,然后在 forloop 中使用连接?就是这个问题? 嗯,我们确实需要更好的文档和示例。现在最好的例子在测试中:github.com/tornadoweb/tornado/blob/…

以上是关于Python websocket 客户端 - 从 python 代码向 WebSocketServer 发送消息的主要内容,如果未能解决你的问题,请参考以下文章

通过 Websockets 从 Python Flask 服务器连续向客户端发送数据

通过Websocket从Python Flask服务器连续向客户端发送数据

从python代码连接到Flask websocket [重复]

如何使用 Python(带有 websockets 的服务器)和 JavaScript(客户端)接收 JSON 数据

如何从 websocket(客户端)打印流信息?

同时使用 Python Tornado 后端、WebSocket 监听器和 MQTT 客户端