【问题标题】:Tornado: dynamically sending a websocket message to a javascript page?Tornado:动态地将 websocket 消息发送到 javascript 页面?
【发布时间】:2016-09-09 16:10:47
【问题描述】:

我在服务器 A 上有一个简单的 python 进程,它从服务器 B 检索数据。

收集数据后,我希望能够将 websocket 消息发送到服务器 C 上的 javascript 页面。示意图:

A ---send data---> B -----send websocket message ---> C

如何“动态”向服务器 C 发送新的 websocket 消息?是否可以这样做,还是我必须先从 Javascript 页面接收消息,然后发送回响应?

我正在使用 tornado,但我不知道应该如何实例化 websocket.WebSocketHandler 并调用 write_message() 函数。在我看到的每个示例中,都没有明确实例化此类,例如:

app = web.Application([ ('/ws', WebSocketHandler, ), ]) # the class is just declared

我该怎么做?作为 Web 开发的新手,我觉得 Tornado 看起来很复杂。

谢谢

【问题讨论】:

    标签: web websocket tornado


    【解决方案1】:

    websocket 连接必须始终由浏览器发起。它不必发送第一条消息;它可以打开连接并坐在那里等待来自服务器的消息,但浏览器必须始终启动该过程(因为浏览器知道如何与服务器对话,但服务器无法与浏览器对话,除非在响应浏览器的请求)

    【讨论】:

    • 谢谢。这是否意味着我必须实现某种心跳机制,以便客户端定期轮询服务器以获取新数据?
    • 客户端不需要轮询,它只需要创建一个websocket连接并保持打开状态(如果失败则重新打开)。然后服务器就可以向它推送东西了。
    • 好的,但这就是我最初问题的目的:在 WebSocketHandler 类的实例化之后,似乎没有办法显式调用 tornado write_message() 函数......怎么样服务器应该在打开连接后明确地向客户端写入消息,而不一定是在客户端消息到达时?谢谢
    • 在您的open() 回调中,您可以保存对WebSocketHandler 对象的引用并稍后调用write_message。
    • 客户端连接时为你实例化。见github.com/tornadoweb/tornado/blob/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    相关资源
    最近更新 更多