相关疑难解决方法(0)

如何扩展socket.io?

假设服务器获得10,000个并发连接(通过socket.io).这是很多,如果它不能再处理,我需要启动另一台服务器.

如何将这两个服务器与socket.io同步?

ajax comet node.js socket.io

23
推荐指数
2
解决办法
1万
查看次数

使用redis + cluster扩展Node.js + Socket.IO

目前,我面临的任务是必须使用Amazon EC2扩展Node.js应用程序.根据我的理解,这样做的方法是让每个子服务器使用集群使用所有可用的进程,并具有粘性连接,以确保"记住"连接到服务器的每个用户关于他们当前数据的工作者以前的会议.

完成此操作之后,我所知道的下一个最佳方法是根据需要部署尽可能多的服务器,并使用nginx在所有服务器之间进行负载平衡,再次使用粘性连接来了解每个用户数据所在的"子"服务器.

因此,当用户连接到服务器时,会发生什么?

客户端连接 - >查找/选择服务器 - >查找/选择进程 - > Socket.IO握手/连接等.

如果没有,请允许我更好地理解这种负载平衡任务.我也不明白redis在这种情况下的重要性.

下面是我用来在一台机器上使用所有CPU的代码,用于单独的Node.js进程:

var express = require('express');
cluster = require('cluster'),
net = require('net'),
sio = require('socket.io'),
sio_redis = require('socket.io-redis');

var port = 3502,
num_processes = require('os').cpus().length;

if (cluster.isMaster) {
// This stores our workers. We need to keep them to be able to reference
// them based on source IP address. It's also useful for auto-restart,
// for example.
var workers = [];

// Helper function for spawning worker …
Run Code Online (Sandbox Code Playgroud)

load-balancing nginx amazon-ec2 node.js socket.io

10
推荐指数
1
解决办法
6677
查看次数

我多久可以使用Socket.IO发送数据?

我正在创建一个Web应用程序,需要将少量数据(每个插槽3个整数值)从服务器发送到客户端非常频繁,我想看看是否有使用Socket.IO更新客户端的最大频率.

我希望至少实现50个套接字连接,每个连接每秒发送20个更新.理想的数字是200个套接字连接,每秒发送50个更新.

问题:使用Socket.IO发送新数据的频率是否有限制?

注意:我认识到这也成为服务器 - 客户端连接的速度问题,因此我需要了解有关连接速度的任何信息.我计算出,如果发送的每个数据包大约是500字节,那么我将能够在1 MB/s连接上每秒发送20次更新到100个连接.

javascript sockets websocket node.js socket.io

8
推荐指数
2
解决办法
4543
查看次数

Node.JS,Socket.IO和Clusters中的WebSocket握手不起作用

我在使用Node.js,socket.io和node.js集群集群我的应用程序时遇到问题.

我使用socket.io-redis来共享所有工作人员的信息,但是无法正常工作.

我的代码:

var cluster   = require('cluster');
var numCPUs = require('os').cpus().length;

if (cluster.isMaster) {   
  // Fork workers.
  for (var i = 0; i < numCPUs; i++) {      
    cluster.fork();
  }

  cluster.on('exit', function(worker, code, signal) {
    console.log('worker ' + worker.process.pid + ' died');
  });
} else {

    ...

         var express   = require("express");
         //Server
         var server = express();
         //Socket.io
         var http  = require('http').Server(server);
         var io    = require('socket.io')(http);
         var redis_io = require('socket.io-redis'); 
         var redis = require("redis");

         io.adapter(redis_io({host: "127.0.0.1", port: 6379 })); 

    ...
}
Run Code Online (Sandbox Code Playgroud)

在客户端,我得到握手错误,如400错误或WebSocket在建立连接之前关闭. …

cluster-computing node.js express socket.io

5
推荐指数
1
解决办法
3367
查看次数

socket.io + redis + expressjs cluster - 在expressjs请求中获取套接字对象

基于这个答案的问题:https://stackoverflow.com/a/18650183/4478897

我试图找到这个解决方案,但似乎没有任何东西可以按照我需要的方式工作.

集群expressjs,socket.io我们可以使用redis共享会话并ioioworld(io.sockets.on('connection',...)内发送消息.问题是我们是想socket.join/leaveexpressjs世界里发送消息(或使用简单的)(route.get/post).

如果我们不使用集群,我们可以atach客户socket对象明确request对象(或简单地exportio对象),然后在任何GET/POST路线随时使用它.

在另一方面,如果我们的集群和使用所提到的方法来获取socket里面的对象expressjs世界,有时socket对象,因为未定义socket此客户端对象在其他初始化worker.

一些示例流程:

  • 客户端连接到http:// localhostworker 1处理此请求.
  • 加载页面后,客户端连接到socket.io.Worker 2处理此连接.
  • 客户端再次执行POST worker 1worker X处理此请求.

在这种情况下,当客户端执行POST时,只worker 2知道socket该客户端的对象.所以这将得到一个未定义的socket对象.

那么,问题是:

我们如何socket从任何客户端对象中获取worker它以在expressjs request对象上重用它. …

cluster-computing redis node.js express socket.io

5
推荐指数
1
解决办法
955
查看次数