Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

connecting socketcluster servers

I'm trying to implement this solution (on Win10 x64), but for some reason all the SocketCluster nodes refuse to communicate with each other.

enter image description here

Sothis is my cur. configuration:

  • 1 StateServer [7777]
  • 1 BrokerServer [8888]
  • 2 SocketCluster servers running on ports [ 8000, 8001]
  • 1 LoadBalancer [2000] to divide the trafic between the 2 nodes.

I ensured that both the State and Broker severs are listening:

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

From what I've understood so far, BrokerServer along with the SocketCluster nodes should all connect to the StatusServer(?)

I could successfully connect the BrokerServer to StateServer, but whenever I try to connect any of the SocketCluster services, it reports 'socket hung' errors.

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 instance:

{ 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 }
like image 294
Alexus Avatar asked Nov 29 '16 22:11

Alexus


2 Answers

Are you running those instances in Docker containers by any chance?

Based on the log output that you're getting from the state server (address undefined), it looks like the scc-state instance cannot figure out your instances' IP addresses. This can happen for several reasons. For example, running an instance inside a Docker container can obscure that instance's real IP address. It's also possible that running SCC on Windows could cause similar problems.

The solution to this problem is to set an SCC_INSTANCE_IP environment variable when launching each instance - This environment variable should hold the IP address of the instance which other instances can use to connect to it (if using Docker, you can use the docker inspect command to find the private network IP address of a specific container).

SCC_INSTANCE_IP can be either a private IP address, public IP address or a hostname.

like image 105
Jon Avatar answered Nov 20 '22 23:11

Jon


It turned out, that scaling the cluster horizontally isn't working properly on Windows OS yet (using the current version v.1.2.1). Both SocketCluster nodes aren't communicating with the brokerServer for some reason.

like image 32
Alexus Avatar answered Nov 20 '22 23:11

Alexus