你好,StackOverFlow社区,
我的配置:
我正在构建一个基于MVC (C模块)的php应用程序,我使用的是nginx。会话存储在Redis (会话服务器)中。
我让node.js和socket.io运行来管理所有的realTime事务(聊天、页面上的状态等等)
node.js和php使用来自redis的相同会话(身份验证在PHP端只完成一次),而node.js使用cookie模块来使用它。
socket.io位于一个端口上,在nginx配置中,我将根目录/socket.io/放在该端口上(以流式方式)。
问题或问题:
问题是,速度是非常重要的,我不喜欢php (代码必须每次编译),我需要它realTime '!‘。所以现在我让我的socket.io告诉我的访问者在php上做一个ajax调用(触发来自客户端的调用)。但我不喜欢它不干净。
服务器是256 go内存,8核/16线程,进程2.8-3.5 go,在同一时间,我将有每个类别的服务器上的最大访问者不会超过1000名访问者。具有不同的时区,因此最大值为10到60个请求/秒。
我可以将socket.io用于我的数据和呼叫吗?我的意思是,我不必使用事件作为"submit“,然后"on”,我可以执行submit()并进行回调,这样我就不必每次都发送标题等。
另一种选择是使用ReactPHP (编译一次,然后继续运行)。
你认为它会稳定吗?(97.5%)就足够了。你有什么建议吗?也请随时纠正我:)。如果我做错了什么。
发布于 2014-04-19 05:40:59
听起来你已经很好地掌握了物流,并且能够构建一个有效的解决方案,但你对它的整体架构有点不满意。
许多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还有一个HTML5 chat example using Presence (non-technical overview),它允许您确定用户的连接状态。
通过将所有这些活动从服务器转移到全球分布的实时网络上,您可以简化您的体系结构,同时维护您的PHP服务器。
祝好运!
https://stackoverflow.com/questions/23157280
复制相似问题