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 [重复]