2010-09-10 17 views
3

假設我們有一個基於網絡的應用程序,用戶可以在其中登錄自己的頻道。 而我們的服務器管理和維護用戶列表,以及他們當前的IP地址。如何向多個客戶端通知單個用戶的操作?基於網絡的頻道

當有人登錄時,每個客戶端是否可以收到此用戶登錄的通知?同樣,如果有人註銷,也會生成類似的通知。 (用於維護在線朋友列表)。

IE:服務器可以向每個客戶端發送某種數據包,或者客戶端計算機(登錄/註銷的人)與其他所有客戶端計算機通信。

只是尋找關於這個問題的想法。 如果你知道這種功能id的良好框架就像聽到它一樣。 AJAX或JQuery時刻關注,但這些技術對這類事情有用嗎?

謝謝你們......

回答

2

是的。 Comet就是這個意思。 Here是一個jQuery插件。並且this answer可能會有用。或者,您可以簡單地以給定的速率對服務器進行ajax輪詢,並且可以進行更改。

這來自客戶端。服務器只是提供它所持有的當前狀態(無論是在內存中還是在數據庫中)。但是,當多個服務器在羣集中工作時,應特別注意這種情況。在這種情況下,他們應該複製他們的內存,或使用「硬」存儲(數據庫),以便更改傳播到所有節點。

2

Kwwika是圖書館這樣做只是這樣的事情:http://kwwika.com/

「想你的網頁,即時更新,當東西的變化只需添加一個KwwikTag然後你輸入一些東西到你的KwwikScreen時刻(或發佈?它通過Kwwika API)每個人都會看到它,沒有重新加載,沒有輪詢 - 新信息立即出現在頁面上。「

+0

是不是使用輪詢來實現呢? – Bozho 2010-09-10 16:51:12

+0

來自網站:*「Kwwika通常不依賴輪詢,而是使用更高效的異步數據推送」[*] *「爲每個連接的客戶端使用最有效的支持封裝方法(Kwwika支持六種不同的方法)。「* – RichieHindle 2010-09-10 16:53:02

2

這是可能的,但如果你仔細想想,它會很難讓它很好地擴展。你可以使用類似node.js這樣的基於JavaScript的http服務器,非常簡單(儘管你可以使用普通的apache/etc服務器,只需要注意連接的擴展)。那麼你可以在客戶端使用flash,web套接字或長輪詢來檢查是否有人登錄(擁有線程安全隊列,數據庫表或平日誌文件以保存最近登錄記錄)

長查詢只是通過Ajax向服務器發出請求,服務器在事件發生(即登錄)或超時發生之前不作出響應。

相關問題