2012-02-06 54 views
0

所以我的問題是: 通過PHP建立服務器 - 客戶端連接的最佳方式是什麼? 我的第一種方法(我現在正在使用的方法)是使用AJAX進行操作。 (使用jQuery)服務器到客戶端連接使用PHP

更具體一些: 我有一個大堂和一個遊戲模式,我的首要任務是聊天和遊戲內用戶。

我現在正在做的事情:我有一個PHP文件,它爲數據庫中的每個用戶都更新了一個記錄,還有另一個文件定期檢查這個文件。 (比方說每5秒鐘) 這個問題,有很多的mysql調用,大量的ajax調用,有時當ajax無法及時加載時,記錄不會及時更新, ergo - >用戶斷開連接。

請注意,我需要這個用於我的論文,所以我有時間做這個作業,即使你給我一些鏈接。

任何答案和提示,歡迎您! 在此先感謝。

回答

0

您可以從設置AJAX調用的時間限制開始,並通過仔細檢查來處理任何錯誤,而不是斷開用戶的連接。

每五秒一次通話並不是那麼多,真的。

+0

好的,所以我使用Ajax來檢查遊戲中的用戶,但也用於聊天,以及在大廳中和遊戲之後發生的任何事件。 同時在不同的遊戲和遊說中有很多用戶,仍然不會太多? – ZeeCoder 2012-02-24 15:03:11

0

你可以看看Comet,它使用「長輪詢」保持連接打開,允許沒有輪詢的通信。

問題是,這需要服務器上的更多資源,因爲它可能必須同時打開大量連接。如果您使用的是多服務器的託管服務器,則管理狀態可能會令您頭疼,因爲您需要將用戶綁定到單個IP /服務器或跨服務器管理狀態。你正在爲一套資源換取另一套資源。

您可能需要考慮的一件事(Coment除外)與DB存儲器保持一致,其中包括REDISMEMCACHED以大大提高數據庫性能。

0

一種替代方法是使用共享存儲器 - PHP: Semaphore, Shared Memory and IPC
潛在的問題可能是系統施加的共享內存的限制。此外,訪問共享資源可能會變得複雜,因爲您必須確保它們有防備同時讀/寫的功能。但是,這應該比使用數據庫更快。數據可以每分鐘或半分鐘刷新一次DB等。

如果遊戲模式每秒鐘需要大量的請求/響應,那麼創建一個單獨的程序來處理遊戲邏輯將是一個更好的解決方案,而不是使用PHP。
另一種選擇是使遊戲有狀態(如果可能的話)。