socket.io node.js vs simple node.js ajax vs php / ajax(for data)

时间:2014-04-18 15:31:45

标签: php ajax node.js sockets socket.io

Hello StackOverFlow社区,

我的配置:

我正在构建一个基于MVC(C模块)的php应用程序,我正在使用nginx。 会话存储在Redis(会话服务器)中。

我有node.js和socket.io运行来管理所有实时的东西(聊天,在页面上的存在等等)

node.js和php使用redis中的相同会话(在PHP端只进行一次身份验证),node.js使用cookie模块来使用它。

socket.io在一个端口上,在nginx配置中我在该端口上输入/socket.io/。(流式传输方式)。

问题或疑问:

事情是Speed非常重要,我不喜欢php(代码必须每次编译),我需要它realTime'!'。所以现在我要求我的socket.io告诉我的访问者在php上进行ajax调用(从客户端调用triger)。但我不喜欢它不干净。

服务器是256GB RAM,8核/ 16线程,处理2.8-3.5GHz,同时我在这些类别的服务器上拥有的最大访问者不会超过1000个访问者。使用不同的时区,最多10到60 req /秒。

我可以将socket.io用于我的数据和通话吗?我的意思是我不必将事件用作“提交”然后“打开”我可以执行submit()并进行回调,因此我不必每次都发送标题等。

另外一种方法是使用ReactPHP(编译一次然后继续运行)。

你认为它会稳定吗? (97.5%)就够了。你有什么建议吗?请随意纠正我:)。如果我做错了什么。

1 个答案:

答案 0 :(得分:0)

听起来你对物流有很好的把握,并且已经能够建立一个有效的解决方案,但你对它的整体架构有点不满意。

许多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 Presencenon-technical overview),可让您确定用户&#39;连通状态。

通过将所有这些活动从服务器移到全局分布的实时网络上,您可以在维护PHP服务器的同时简化架构。

祝你好运!