我需要将系统日志发送到浏览器,所以我有一个像这样运行的基于龙卷风的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客户端(最好由Tornado驱动)连接到此websocket的简便方法。客户端不需要接收消息-只需发送它们。我以为这样的帖子我有答案,
How to run functions outside websocket loop in python (tornado)
...但是无论何时发生日志事件,我都需要发送一条消息,最好是从解析事件的代码中发送消息。到目前为止,我遇到的示例围绕基于Tornado的服务器和基于js的客户端。是否有一个简短而又可爱的基于龙卷风的客户端,该客户端仅发送可以从for循环调用的消息?
python大神给出的解决方案
此外,我还开发了完整的Tornado WebSocket客户端/服务器示例。
https://github.com/ilkerkesen/tornado-websocket-client-example
如果要WebSocket身份验证/授权,请查看我的其他项目trebol和sugar。