我在AWS上设置了两个EC2实例,运行在负载均衡器后面,但是当两个实例同时运行时,socket.io会出现问题。我认为这是由于ELB轮询实例和Socket.io在更新到Websockets之前发送请求导致的(会话ID未知)。
我认为通过在Redis上使用共享会话存储,Socket.io可以正常工作,因为所有实例都可以访问会话。
我有一个小应用程序,是使用Node.js(更具体地说是Sails.js)开发的,只是用于测试。我成功配置了ELB以支持TCP模式下的Websockets,并将请求转发到(Phusion Passenger + NGINX),该应用程序运行在Sails.js上。
该应用程序使用运行在Amazon Elasticache上的Redis进行SESSIONS和SOCKETS。如果我单独测试两个实例而没有使用ELB,则可以看到Redis对Sockets有效,因为消息可以在两个实例中发送和接收。
共享会话是否足以使Socket.io正常工作?还是我需要在ELB中使用粘性会话将客户端转发到相同的实例?
我选择ELB是因为它更容易动态添加和删除实例,而使用NGINX(免费版)或HAProxy则比较复杂。
有什么想法吗?
我认为通过在Redis上使用共享会话存储,Socket.io可以正常工作,因为所有实例都可以访问会话。
我有一个小应用程序,是使用Node.js(更具体地说是Sails.js)开发的,只是用于测试。我成功配置了ELB以支持TCP模式下的Websockets,并将请求转发到(Phusion Passenger + NGINX),该应用程序运行在Sails.js上。
该应用程序使用运行在Amazon Elasticache上的Redis进行SESSIONS和SOCKETS。如果我单独测试两个实例而没有使用ELB,则可以看到Redis对Sockets有效,因为消息可以在两个实例中发送和接收。
共享会话是否足以使Socket.io正常工作?还是我需要在ELB中使用粘性会话将客户端转发到相同的实例?
我选择ELB是因为它更容易动态添加和删除实例,而使用NGINX(免费版)或HAProxy则比较复杂。
有什么想法吗?