Подключение серверов socketcluster

Я пытаюсь реализовать это решение (на Win10 x64), но по какой-то причине все узлы SocketCluster отказываются общаться друг с другом.

Sothis - мой козел конфигурация:

  • 1 StateServer [7777]
  • 1 BrokerServer [8888]
  • 2 сервера SocketCluster, работающие на портах [8000, 8001]
  • 1 LoadBalancer [2000] для разделения трафика между двумя узлами.

Я заверил, что и сервер State, и брокер слушают:

  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 }

2 ответа

Вы случайно запускаете эти экземпляры в контейнерах Docker?

Основываясь на выводе журнала, который вы получаете с сервера состояний (адрес не определен), похоже, что экземпляр scc-state не может определить IP-адреса ваших экземпляров. Это может произойти по нескольким причинам. Например, запуск экземпляра внутри контейнера Docker может скрыть реальный IP-адрес этого экземпляра. Также возможно, что запуск SCC в Windows может вызвать аналогичные проблемы.

Решение этой проблемы состоит в том, чтобы установить SCC_INSTANCE_IP переменная среды при запуске каждого экземпляра - эта переменная среды должна содержать IP-адрес экземпляра, который другие экземпляры могут использовать для подключения к нему (если вы используете Docker, вы можете использовать docker inspect команда, чтобы найти частный сетевой IP-адрес конкретного контейнера).

SCC_INSTANCE_IP может быть частным IP-адресом, общедоступным IP-адресом или именем хоста.

Оказалось, что горизонтальное масштабирование кластера еще не работает должным образом в ОС Windows (в текущей версии v.1.2.1). И то и другое SocketCluster узлы не общаются с brokerServer по какой-то причине.

Другие вопросы по тегам