reactjs - 从 React 应用程序发出套接字 io 事件并且在 Node js 服务器上没有接收到它
问题描述
我试图在我的反应应用程序中使用 Socket IO,由于某种原因,我无法从我的反应客户端在我的节点服务器上获取任何事件。不过,我可以在我的 React 应用程序中接收从 Node 服务器发出的事件。
我的节点服务器如下所示:
const express = require('express');
const http = require('http');
const socketio = require('socket.io');
const app = express();
const httpServer = http.createServer(app);
const io = socketio(httpServer, {
cors: {
origin: "http://localhost:3000",
methods: ["GET", "POST"],
}
});
const port = 4000;
io.on('connect', (socket) => {
console.log('socket io connected');
io.emit('message', 'a dog');
io.emit('baby', 'a cat');
io.on('baby', (msg) => {
console.log(msg);
});
io.on('disconnect', (msg) => {
console.log('io disconnected');
});
});
httpServer.listen(port, () => {
console.log(`App listening at http://localhost:${port}`);
});
而我的 React 应用程序只有 App.js,它看起来像这样:
import './App.css';
import socketClient from "socket.io-client";
const URL = "http://localhost:4000";
const socket = socketClient(URL);
socket.on('connect', () => {
console.log(`I'm connected with the back-end`);
socket.emit('baby', 'what is going on');
socket.on('disconnect', () => {
console.log('user disconnected');
});
});
socket.on('message', (msg) => {
console.log(msg);
});
socket.on('baby', (msg) => {
console.log(msg);
});
socket.emit('baby', 'what is going on');
function App() {
return (
<div className="App">
</div>
);
}
export default App;
就像我上面提到的,我只能从我的节点服务器接收套接字事件,并在我的浏览器控制台上看到打印出的消息,但我在我的节点服务器上看不到任何消息日志。即使我刷新浏览器或关闭 React 应用程序,它也不会打印“io disconnected”。我在 Node 服务器日志中看到的唯一内容是消息“socket io connected”。请大家帮忙赐教,万分感谢!
解决方案
将服务器上的and更改为io.on('baby')
and 。基本上,可用于向所有连接的套接字发送消息,但是当您想在服务器上接收消息时,您将在各个套接字上侦听该消息,否则您将无法区分连接到的不同客户端服务器。另请注意,当您只想向 1 个客户端发送消息时,您将再次使用,而不是。io.on('disconnect')
socket.on('baby')
socket.on('disconnect')
io.emit
socket.emit
io.emit
推荐阅读
- java - @Profile 在没有 Spring Boot 的情况下不起作用(-Dspring.profiles.active 与 maven)
- node.js - 如何使用 Buffer 原生 API 从 Buffer 中读取时间戳?
- javascript - Sweetalert2:在新选项卡中打开外部链接是
- python - 如何在 Scikit-Learn 中修改决策树算法中的分裂标准(基尼/熵)?
- angular - 角度 4 中的路由器在导航期间是否仅保持一种状态?
- javascript - 返回的函数值,但未显示在控制台中。解释?
- javascript - 增强织物 js 中重图像缩放的性能
- python - Python multiprocess.Pool.map 无法处理大型数组。
- python - 通过在 Tensorflow 中将固定数量的行加在一起来减少矩阵
- javascript - 为什么 S 函数中的第一个 for 循环在下面的节点 js 程序中无限运行?