9

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 }
Alexus
  • 1,887
  • 1
  • 23
  • 50
  • I am facing the same issue on linux with latest versions of state version, broker and socketcluster repos. Did you find any workaround.? – nagamanojv May 11 '17 at 10:31
  • well , as soon as I switched to Ubuntu, everything started to work . Haven't tested the latest repo though. – Alexus May 11 '17 at 11:44
  • I am currently on ubuntu only. Its not working. Dunno what is wrong. – nagamanojv May 11 '17 at 13:08
  • The main thing is the socketcluster repo don't have a server.js file in its root directory now. So, I did an 'npm install socketcluster -g' and then 'npm create myApp' which creates an app. I am running socketcluster referring to state server from inside myApp. Do you think I should be doing something else.! – nagamanojv May 11 '17 at 13:11

2 Answers2

2

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.

Jon
  • 1,224
  • 2
  • 14
  • 23
1

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.

Alexus
  • 1,887
  • 1
  • 23
  • 50