WebSockets 正是您想要的。然而,它们是(相对)最近才添加到浏览器中的,因此支持并不普遍。WebSocket 支持
Websocket 模型允许您使用 Web 浏览器将套接字从服务器连接到客户端,然后从服务器发送消息并在客户端异步接收消息,反之亦然。
由于 Node.js 是 Javascript,并且您很可能会用 Javascript 编写客户端,因此它适合作为编写耦合组件的明智选择,例如在本场景中。
最流行的 WebSocket 库是Socket.io它是为与 Node.js 一起使用而构建的。使用 Socket.io,您的通知模型将如下所示:
Server
io.sockets.on('connection', function (socket) {
socket.emit('notification', { name: 'Notification', message: 'It\'s here');
});
Client
var notifications = document.getElementById('nlist');
socket.on('notification', function(notification) {
var div;
// make some DOM changes
document.title = notification.name;
div = document.createElement('div');
div.innerHTML = notification.message;
notifications.appendChild(div);
socket.emit('received-notification');
});
Socket.io 允许您使用自定义事件名称,如此处所示,这使得设计通信 API 变得更加容易。在用户没有 Web 套接字的情况下,它还具有 XHR 长轮询和 Flash 套接字的后备功能。
在这种情况下,Node 会比 Django 更快,但如果这是您第一次尝试 Node,您可能会发现 Django 中的代码库更易于管理。设计具有一系列这样的回调的应用程序可能有点困难。我从未在 Django 中使用过 WebSockets,但我对 Tornado 和 WebSockets 的体验很差。