在apache反向代理后面的路径上时Socket.io客户端未接收到发出的事件

时间:2018-09-05 15:46:38

标签: node.js apache ionic-framework socket.io

我在节点应用程序中使用socket.io。我也有一个离子应用程序作为客户端。当我的计算机在localhost下提供服务时,它们都在工作。但是今天,节点应用程序已通过apache上传到测试服务器。 Apache已配置为https://SERVER_IP/attendance下的nodejs服务器的反向代理,并且客户端连接到socket.io服务器,但是没有发出的事件进入客户端。

我将发布客户端,服务器和apache配置的相关代码:

离子客户端代码

this.socket = io(this.socketUrl, {
    query: {
      sessionId: sessionId
    }
  });
  this.socket.on('connect', (data) => {
    console.log('connected', data);
  });
  this.socket.on('code received', (code) => {
    console.log('code received');
    this.code = code;
  });

nodejs服务器代码

io.on('connection', function (socket) {
  const querySessionId = socket.handshake.query.sessionId;
  connectedClients[querySessionId] = socket;
  socket.broadcast.emit('connect', 'connected');
  socket.on('disconnect', function () {
    delete connectedClients[querySessionId];
  });
});

connectedClients[sessionId].emit('code received', newCode);

我使用connectedClients保留客户列表,并将消息发送给适当的客户,而不是每个人。

Apache配置

<VirtualHost *:80>
  ...

  ProxyPreserveHost On
  RewriteEngine On
  RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
  RewriteCond %{QUERY_STRING} transport=websocket    [NC]
  RewriteRule /(.*)           ws://localhost:3000/$1 [P,L]

  ProxyPass        /socket.io http://localhost:3000/socket.io
  ProxyPassReverse /socket.io http://localhost:3000/socket.io
  ProxyPass /attendance http://localhost:3000
  ProxyPassReverse /attendance http://localhost:3000
</VirtualHost>

nodejs应用程序正在服务器的端口3000上运行。奇怪的是,如果我尝试通过端口而不是通过/ attendance路径进行连接,则它可以正常工作,并且客户端接收到发出的事件。

0 个答案:

没有答案