连接socketcluster服务器

时间:2016-11-29 22:20:07

标签: node.js websocket socketcluster

我正在尝试实现此solution(在Win10 x64上),但由于某种原因,所有SocketCluster节点都拒绝相互通信。

enter image description here

Sothis是我的。配置:

  • 1 StateServer [7777]
  • 1 BrokerServer [8888]
  • 在端口[8000,8001]
  • 上运行的2个SocketCluster服务器
  • 1 LoadBalancer [2000]在两个节点之间划分流量。

我确保State和Broker服务器都在监听:

  TCP    [::]:7777              [::]:0                 LISTENING
  TCP    [::]:8888              [::]:0                 LISTENING

根据我目前的理解,BrokerServer以及SocketCluster节点都应连接到StatusServer(?)

我可以成功将BrokerServer连接到StateServer,但每当我尝试连接任何SocketCluster服务时,它都会报告“套接字挂起”错误。

StateServer

SC Cluster State Server is listening on port 7777
Sever d08298c6-523f-4c1b-9fcc-efd4e92fab22 at address undefined on port 8888 joined the cluster
Client 10612bde-514f-40d3-9340-7179a1901376 at address undefined joined the cluster
Cluster state converged to active:["ws://[undefined]:8888"]

SocketCluster实例:

{ SocketProtocolError: Socket hung up
    at Emitter.SCSocket._onSCClose (C:\Users\Alex\AppData\Roaming\npm\node_modules\sc-cluster-broker-client\node_modules\socketcluster-client\lib\scsocket.js:596:15)
    at Emitter.<anonymous> (C:\Users\Alex\AppData\Roaming\npm\node_modules\sc-cluster-broker-client\node_modules\socketcluster-client\lib\scsocket.js:285:12)
    at Emitter.emit (C:\Users\Alex\AppData\Roaming\npm\node_modules\sc-cluster-broker-client\node_modules\component-emitter\index.js:131:20)
    at Emitter.SCEmitter.emit (C:\Users\Alex\AppData\Roaming\npm\node_modules\sc-cluster-broker-client\node_modules\sc-emitter\index.js:28:26)
    at Emitter.SCTransport._onClose (C:\Users\Alex\AppData\Roaming\npm\node_modules\sc-cluster-broker-client\node_modules\socketcluster-client\lib\sctransport.js:175:30)
    at WebSocket.wsSocket.onerror (C:\Users\Alex\AppData\Roaming\npm\node_modules\sc-cluster-broker-client\node_modules\socketcluster-client\lib\sctransport.js:104:12)
    at WebSocket.onError (C:\Users\Alex\AppData\Roaming\npm\node_modules\sc-cluster-broker-client\node_modules\ws\lib\WebSocket.js:452:14)
    at emitOne (events.js:96:13)
    at WebSocket.emit (events.js:188:7)
    at WebSocket.EventEmitter.emit (C:\Users\Alex\AppData\Roaming\npm\node_modules\socketcluster\node_modules\sc-domain\index.js:12:31)
  name: 'SocketProtocolError',
  message: 'Socket hung up',
  code: 1006 }

1 个答案:

答案 0 :(得分:1)

您是否有机会在Docker容器中运行这些实例?

根据您从状态服务器获取的日志输出(地址未定义),scc状态实例看起来无法找出实例的IP地址。这可能由于几个原因而发生。例如,在Docker容器中运行实例可能会掩盖该实例的真实IP地址。在Windows上运行SCC也可能会导致类似的问题。

这个问题的解决方案是在启动每个实例时设置一个SCC_INSTANCE_IP环境变量 - 这个环境变量应该保存实例的IP地址,其他实例可以使用它来连接它(如果使用Docker,你可以使用docker inspect命令查找特定容器的专用网络IP地址。

SCC_INSTANCE_IP可以是私有IP地址,公共IP地址或主机名。