[英]socket.io node.js vs simple node.js ajax vs php/ajax (for data)
您好StackOverFlow社區,
我的配置:
我正在基於MVC(C模塊)構建一個php應用程序,並且正在使用nginx。 會話存儲在Redis(會話服務器)中。
而且我正在運行node.js和socket.io來管理所有實時事件(聊天,頁面上的狀態等等)。
node.js和php使用來自redis的相同會話(身份驗證僅在PHP端執行一次),而node.js使用cookie模塊使用它。
socket.io在端口上,並且在nginx配置中,我在該端口上/root.socket.io /。(流方式)。
問題或問題:
問題是速度非常重要,我不喜歡php(每次都要編譯代碼),而我需要realTime'!'。 所以現在我要求我的socket.io告訴我的訪問者在php上進行ajax調用(從客戶端觸發該調用)。 但我不喜歡它不干凈。
該服務器為256GB RAM,8核/ 16線程,進程為2.8-3.5GHz,同時我在所有這些服務器類別上擁有的最大訪問者不會超過1000個訪問者。 使用不同的時區,因此最大為10到60請求/秒。
我可以使用socket.io進行數據和調用嗎? 我的意思是,我不必將事件用作“提交”,而不必在“ on”上使用,我可以執行submit()並進行回調,因此我不必每次都發送標頭等。
另外一種選擇是使用ReactPHP(編譯一次然后繼續運行)。
您認為它會穩定嗎? (97.5%)就足夠了。 你有什么建議嗎? 也請隨時糾正我:)。 如果我做錯了。
聽起來您對物流有很好的了解,並且能夠構建一個可行的解決方案,但是您對它的總體體系結構有些不滿意。
許多PHP項目在合並實時功能時使用的一種方法是使用外部實時網絡在客戶端和服務器之間以對等方式傳遞數據。 例如,PubNub提供了一個JavaScript SDK ,使您可以在不同渠道上發布和訂閱聊天事件。 在您的客戶端上,您可以使用以下代碼:
<script src=http://cdn.pubnub.com/pubnub.min.js ></script>
<script>(function(){
var pubnub = PUBNUB.init({
publish_key : 'demo',
subscribe_key : 'demo'
})
pubnub.publish({
channel : "chat",
message : "Hi."
})
})();</script>
在您的情況下,此模型的好處是不會強迫客戶端繼續進行服務器調用或等待服務器的響應。 說到服務器,這是您如何訂閱chat
頻道的方法(假設您使用的是5.3):
$pubnub = new Pubnub(
"demo", ## PUBLISH_KEY
"demo", ## SUBSCRIBE_KEY
"", ## SECRET_KEY
false ## SSL_ON?
);
$pubnub->subscribe(array(
'channel' => 'chat', ## REQUIRED Channel to Listen
'callback' => function($message) { ## REQUIRED Callback With Response
var_dump($message); ## Print Message
return true; ## Keep listening (return false to stop)
}
));
PubNub還有一個使用Presence的HTML5聊天示例 ( 非技術概述 ),它使您可以確定用戶的連接狀態。
通過將所有這些活動從服務器移到全球分布的實時網絡上,可以簡化架構,同時維護PHP服務器。
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.