首页 > 解决方案 > 从 React 到 Nodejs 的 Socket.IO 连接 - 反复轮询

问题描述

我正在尝试socket.io从我的React前端连接到我的Node.js后端

在客户端我设置我的套接字如下:

import { io } from 'socket.io-client';
import { getToken } from './tokenFetcher';
import store from './store';

const socket = io(`${process.env.API_URL}/`, {
    query: `Authorization=${getToken(store.getState())}`,
});

接下来在我的后端,我有以下用于身份验证的中间件:

const socketAuthMiddleware = (socket, next) => {
   const token = socket.handshake.query.Authorization;
   ....
   if (validToken) return next(); 
}

接下来,我在后端运行以下代码:

connections.push(socket);

socketToUserMap[userID] = { socketId: socket.id };

socket.enabled = true;

socket.emit('announcements', {
    message: 'A new user has joined!',
});

console.log(
  ' %s sockets is connected',
  connections.length,
  socket.id,
  'connected'
);

然后我在客户端监听事件:

componentDidMount = () => {
    socket.on('announcements', params => {
        console.log('CONNECTED');
    });
};

我根本看不到客户端上显示的日志。相反,我看到以下请求触发:

在此处输入图像描述

他们返回以下回复:

96:0{"sid":"3P_8ERxEbU1SVriOAAA7","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":5000}

200响应代码。

我的 websockets 选项卡如下所示:

在此处输入图像描述

在服务器上,我看到以下日志每 2-3 秒重复一次:

 1 sockets is connected sd2gdVW_SeZ7y5btAACE connected
socket disconnected
 0 sockets is connected

表示套接字已连接(意味着它通过我的身份验证中间件进行了连接),但之后很快断开连接。

我不太确定我做错了什么 - 我使用相同的设置通过我的 iOS 应用程序连接到服务器,并且工作正常。

标签: javascriptnode.jssocketswebsocketsocket.io

解决方案


推荐阅读