reactjs - React Development Server(启动脚本)导致与 socket.io 服务器的重复连接
问题描述
我在后端使用 express 和 socket.io,并为前端做出反应。如果我直接连接到后端服务器(端口 3001)并且它从 react 构建文件夹(通过创建react-scripts build
)为我服务,一切都按预期工作,只创建一个 socket.io 连接。刷新页面会断开它,然后再次连接。
但是,如果我通过 连接到托管的开发服务器(端口 3000)react-scripts start
,则会创建一个神秘的第二个套接字连接。此套接字有一个新 ID,并且似乎没有绑定到我的任何客户端事件,因为我的客户端代码在使用我的应用程序期间从未看到重复调用。只是初始加载以及刷新浏览器会导致两个connect
/disconnect
事件。每个事件的第二个事件通常在第一个事件之后大约 500 毫秒。
我也在使用"proxy"
react 应用程序的 package.json 中定义的属性,但能够删除它并验证这不是原因(在使用扩展禁用 CORS 后,因为这会干扰 socket.io 连接到另一台服务器) .
我的应用程序要求每个客户端只有一个连接。我只能在测试期间使用内置的反应应用程序来解决这个问题,但这很烦人。很容易复制。下面是一些示例打字稿代码。
这是反应开发服务器的错误还是我的问题?
// server
import * as exp from "express";
import * as http from "http";
import * as io from "socket.io";
const expWrap = express();
const httpServer = http.createServer(expWrap);
const ioWrap = new io.Server(httpServer);
ioWrap.on("connect", (socket: io.Socket) =>
{
console.log(`Socket ${socket.id} connected.`);
socket.on("disconnect", () =>
{
console.log(`Socket ${socket.id} disconnected.`);
}
}
// client react component
import io from "socket.io-client";
// constructor for react component
constructor(props: Props)
{
this.socket = io();
}
解决方案
推荐阅读
- django - django 从多个没有外键的表中过滤数据
- python - s.replace 字符串方法,循环遍历一个字符串
- python - 如何从外部重新定义函数中的可变变量?
- android - 由于蓝牙连接的 Android 应用程序在 Arduino 上控制 LED 的问题
- javascript - typeahead.bundle.js:374 Uncaught TypeError: this._send 不是函数(在 ReactJs 中)
- xquery - xquery "" 和 () 的区别
- visual-studio-code - VS Code 键盘快捷键是否有底层逻辑/模式?
- ruby - 法拉第 - 测试连接
- performance - FastReports pascalscript if
- mysql - 如何将列中的结果放在结果的顶部?