Socket.io 客户端未连接到服务器 React 和 Express
Socket.io client not connecting with server React and Express
我正在使用带有 express 后端的 React 前端。
React 套接字代码
import io from "socket.io-client";
function ReactComponent() {
const socket = io("http://localhost:5000");
socket.on('connection', () => {
console.log("connection")
});
useEffect(() => {
socket.emit('new-user', "hello");
}, []);
return(<p>Test text</p>);
}
export default ReactComponent;
快递套接字代码
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
io.on('connection', (socket) => {
console.log("New client connected");
socket.on('new-user', (room) => {
socket.join(room);
socket.to(room).broadcast.emit('user-connected', "thx for info");
})
});
通过查看文档和其他示例,这应该有效,如果有效,express 应该打印出“New client connected”,但这并没有发生。
您没有向后端名为 connection
的侦听器发送消息。你必须在后端与监听器通信
import io from "socket.io-client";
function ReactComponent() {
const socket = io("http://localhost:5000");
socket.emit('connection');
}
花了一些时间才找到这个。希望这对以后的其他人有所帮助!
我曾经坐过的快递:
const http = require('http').Server(app);
const io = require('socket.io')(http);
const port = process.env.PORT || 5000;
app.listen(port);
相反,应该是:
const port = process.env.PORT || 5000;
var server = app.listen(port);
var io = require('socket.io')().listen(server);
请注意没有提及 http 模块,因为大多数其他答案都需要它。
这里有一个有助于理解问题的有用线程:Express.js - app.listen vs server.listen
此外,相关文档在这里:
https://socket.io/docs/v4/server-initialization/
如果您在代码中使用了 app.listen()
,那么您需要将其更改为 http.listen()
,然后它应该可以工作。
因为在创建http
服务器时已经通过了app
。这意味着 http
需要监听某个端口而不是 app
.
我正在使用带有 express 后端的 React 前端。
React 套接字代码
import io from "socket.io-client";
function ReactComponent() {
const socket = io("http://localhost:5000");
socket.on('connection', () => {
console.log("connection")
});
useEffect(() => {
socket.emit('new-user', "hello");
}, []);
return(<p>Test text</p>);
}
export default ReactComponent;
快递套接字代码
const express = require('express');
const app = express();
const http = require('http').Server(app);
const io = require('socket.io')(http);
io.on('connection', (socket) => {
console.log("New client connected");
socket.on('new-user', (room) => {
socket.join(room);
socket.to(room).broadcast.emit('user-connected', "thx for info");
})
});
通过查看文档和其他示例,这应该有效,如果有效,express 应该打印出“New client connected”,但这并没有发生。
您没有向后端名为 connection
的侦听器发送消息。你必须在后端与监听器通信
import io from "socket.io-client";
function ReactComponent() {
const socket = io("http://localhost:5000");
socket.emit('connection');
}
花了一些时间才找到这个。希望这对以后的其他人有所帮助!
我曾经坐过的快递:
const http = require('http').Server(app);
const io = require('socket.io')(http);
const port = process.env.PORT || 5000;
app.listen(port);
相反,应该是:
const port = process.env.PORT || 5000;
var server = app.listen(port);
var io = require('socket.io')().listen(server);
请注意没有提及 http 模块,因为大多数其他答案都需要它。
这里有一个有助于理解问题的有用线程:Express.js - app.listen vs server.listen
此外,相关文档在这里: https://socket.io/docs/v4/server-initialization/
如果您在代码中使用了 app.listen()
,那么您需要将其更改为 http.listen()
,然后它应该可以工作。
因为在创建http
服务器时已经通过了app
。这意味着 http
需要监听某个端口而不是 app
.