目前,我面临的任务是必须使用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) 我目前正在创建一个水平可伸缩的socket.io服务器,如下所示:
LoadBalancer (nginx)
Proxy1 Proxy2 Proxy3 Proxy{N}
BackEnd1 BackEnd2 BackEnd3 BackEnd4 BackEnd{N}
Run Code Online (Sandbox Code Playgroud)
我的问题是,使用socket-io redis模块,如果它们都连接到同一个redis服务器,我可以将消息发送到连接到其中一个后端服务器的代理服务器之一的特定套接字吗?如果是这样,我该怎么做?