Websockets / Tornado - 数据库更新时通知客户端

10 投票
3 回答
7705 浏览
提问于 2025-04-16 18:21

我正在尝试使用Tornado的网页套接字服务器,想要在数据库发生变化时实时通知用户。我希望能用HTML5的网页套接字来实现这个功能,尽管大多数浏览器对它的支持并不好。Tornado包里的示例都没有使用网页套接字,而且文档里也没有提到这方面的内容,所以我不知道该从哪里开始。我在谷歌上找到的几个例子,要么不管用,要么文档写得很糟糕。

有没有人能给我一些例子,教我如何用Tornado在MySQL数据库更新时把数据推送给客户端,或者其他类似的东西让我学习一下?

3 个回答

0

这篇文章使用了websockets和redis,对基本概念讲解得很清楚。

6

我之前成功地使用了 socket.io 客户端和 tornadio 作为服务器端。Socket.IO 是一个可以简化 websockets 使用的工具,如果浏览器不支持 websockets,它还会提供其他替代方案(比如长轮询、Flash socket 等等)。

要使用它,你只需要按照 tornadio 的文档写一个 tornadio 脚本,这个脚本会监控你的数据库。然后在你的网页中引入 socket.io 的 JavaScript 代码,并让它连接到你在 tornadio 脚本中指定的 URL route,也就是你的 tornadio 服务器所在的位置。

8

Lee的回答很好,如果你需要支持老旧的浏览器,可能需要用socket.io。

不过在tornado中使用Websockets非常简单:

import tornado.websocket

  class EchoWebSocket(tornado.websocket.WebSocketHandler):
      def open(self):
          print "WebSocket opened"

      def on_message(self, message):
          self.write_message(u"You said: " + message)

      def on_close(self):
          print "WebSocket closed"

然后像处理其他请求一样来路由它,并在你的视图中加入Websocket的JavaScript代码:

  var ws = new WebSocket("ws://localhost:8888/websocket");
  ws.onopen = function() {
     ws.send("Hello, world");
  };
  ws.onmessage = function (evt) {
     alert(evt.data);
  };

想了解更多信息,可以查看源代码:https://github.com/facebook/tornado/blob/master/tornado/websocket.py

撰写回答