javascript - 从 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 应用程序连接到服务器,并且工作正常。
解决方案
推荐阅读
- python - plotly:TypeError:无法将字典更新序列元素#0转换为序列
- php - xampp 不工作,当我尝试启动我的服务器时出现错误
- c++ - 如何从向量构造整数值
C++ 中的值 - alfresco - 标题上的 UTF-8 土耳其语字符
- mysql - 无论记录是否存在,获取两个日期之间的最小余额
- azure - Azure:在 Azure Web 应用程序的 Linux 容器中运行非 Web 应用程序
- spring-amqp - 如果接收器/侦听器在单独的项目中,如何使用 listenLatch
- php - 如何在 with() 方法中使用关系?
- angular - 在 Ionic 3 中,使用 Angular 5.2.9,HttpClient 无法为 get 请求设置标头,但可以为 post 请求设置标头
- java - 无法通过 Selenium WebDriver 启动 Chrome 67,ChromeDriver 版本为 67。Eclipse 版本为 Oxygen M2