WebSockets正是你想要的。然而,它們是瀏覽器的一個(相對)最近的增加,因此支持並不是無處不在。 WebSocket Support
websocket模型允許您使用Web瀏覽器將套接字從服務器連接到客戶端,然後從服務器發送消息並在客戶端異步接收消息,反之亦然。
因爲Node.js是Javascript,您有可能會用Javascript編寫客戶端,因此它可以作爲編寫耦合組件的明智選擇,例如在這種情況下。
最流行的WebSocket庫是Socket.io,它是爲與Node.js一起使用而構建的。隨着Socket.io,您的通知模式將是這個樣子:
服務器
io.sockets.on('connection', function (socket) {
socket.emit('notification', { name: 'Notification', message: 'It\'s here');
});
客戶
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套接字的後備功能。
在這種情況下,節點將比Django更快,但是如果這是您第一次參與Node,您可能會發現您的代碼庫在Django中更易於管理。用這樣的一系列回調來設計應用程序可能有點困難。我從未使用Django使用過WebSockets,但我在Tornado和WebSockets方面的經驗很差。
基本上你需要設置一個javascript間隔,並且每n秒調用一次ajax函數來檢查更新(新消息),這應該是php/python實現上的整體行爲,在節點中你不需要需要設置一個超時時間,因爲客戶端js會詢問節點服務器是否有新消息,並且只有當服務器發送更新時服務器纔會向您發送更新,這只是爲了讓您高興而有人給您一個更好的答案。如果是我,我會使用node.js,正是爲了創建它的這種應用程序。 – Zagen
嗨Zarich,謝謝你的評論。但是,這不是投票嗎?我想實現一個實際的「實時」功能。 –
是的,這就是爲什麼node.js在這種事情上更好,但等待真正的答案=) – Zagen