2009-07-23 54 views
4

我創建了一個由客戶端輪詢驅動的簡單聊天服務器。客戶端每隔幾秒發送一次數據請求,並獲取任何新消息以及關於對方是否仍然連接的信息。如何創建不是由輪詢驅動的聊天服務器?

由於客戶端運行在移動平臺(iPhone)上,我一直在尋找擺脫輪詢的方式,這會迅速耗盡電池電量。我已經讀過,可以無限期地打開http連接,但還沒有理解如何在實踐中使用這種技術。我也想知道這樣的連接是否足夠穩定以便在移動設置中使用。

理想的情況是服務器只在發生影響它們的事件(例如對等方發佈消息或離線)時才向客戶端發送數據。

建議嘗試通過http完成此操作,還是必須通過tcp編寫自己的協議?定製xmpp到我的需求有多困難(我的聊天服務器有一些我必須輕鬆實現的特殊功能)。

回答

1

我才發現自己this article,它描述了以下技術(這是我在這個問題提到):

...在客戶端做一個HTTP請求 並讓服務器保持請求 直到有一條消息 推送。如果TCP/IP連接是 丟失或超時,客戶端將 發出一個新的HTTP請求,並且延遲 將只是 請求/響應對的往返時間。 。 。這種模式 有效需要兩個TCP/IP的HTTP連接 ,客戶 服務器,雖然沒有永久的和 因此移動友好

1

您可能想查看this project,其中使用了各種技術,包括Comet。​​,這裏是從該頁面

這是我非常高興能夠 公佈顯示,我一直在努力 在我的業餘時間,在過去一個月 項目的 首次公開片段二,全新的基於Web的IRC聊天 應用程序。

這個項目彙集了很多 新技術必須是 開發,使這是一個可行的, 可擴展和高效。

一些基本工具,建立以 使這個更多鈔票,我認爲 「不夠穩定」已經發布, 如php Socket Daemon library 我寫要能夠應付 數百多達數千 「 Comet「http連接,以及相等數量的IRC客戶端連接。

0

我認爲這幾乎是不可能的和危險的。互聯網工作在無狀態和無連接的意義上,客戶端和服務器之間的連接總是被視爲不可靠的。這不是爲了好玩。

通過試圖獲得有狀態的連接,你正在引入新的問題。尤其是來自3g應用程序。如果連接中斷?您無法控制服務器,無法推送。

我認爲它會更容易發送短信/短信,並有一個應用程序來處理它。