node.js - 连接 socketcluster 服务器

标签 node.js websocket socketcluster

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

enter image description here

所以这是我的坏蛋。配置:

  • 1 个状态服务器 [7777]
  • 1 个代理服务器 [8888]
  • 2 个运行在端口 [8000, 8001] 上的 SocketCluster 服务器
  • 1 个 LoadBalancer [2000] 来划分两个 Node 之间的流量。

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

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

据我目前的了解,BrokerServer 以及 SocketCluster Node 都应该连接到 StatusServer(?)

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

状态服务器:

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 }

最佳答案

您有没有在 Docker 容器中运行这些实例?

根据您从状态服务器(地址未定义)获得的日志输出,scc-state 实例似乎无法计算出您实例的 IP 地址。发生这种情况的原因有多种。例如,在 Docker 容器中运行一个实例可能会掩盖该实例的真实 IP 地址。在 Windows 上运行 SCC 也可能导致类似的问题。

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

SCC_INSTANCE_IP 可以是私有(private) IP 地址、公共(public) IP 地址或主机名。

关于node.js - 连接 socketcluster 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40876822/

相关文章:

javascript - 更新数据库后返回更新的对象而不是计数

javascript - Node http.get 解析 JSON 正文

node.js - 检测 S3 对象的内容类型/MIME 类型

angular - Angular 4 中的 Websocket 和 RxJS 混淆

java - SocketCluster - 无法从 Android 应用程序连接到服务器 - 连接被拒绝

javascript - 语法错误: Unexpected end of input in fetch API

Nginx:WebSockets 的 X-Forwarded-For 替代品是什么?

javascript - 从浏览器中的udp端口读取

socketcluster - 如何在 socketcluster 上以编程方式创建 channel ?

java - 如何验证套接字?