Node.js socket.io问题。Can';我不明白为什么它不发送数据
我认为我的配置中有一些设置不正确。它只在我重新启动服务器时发送数据,有时并不总是发送数据。我的堆栈是node.js,带有express和react。这是我的app.js文件Node.js socket.io问题。Can';我不明白为什么它不发送数据,node.js,reactjs,express,socket.io,Node.js,Reactjs,Express,Socket.io,我认为我的配置中有一些设置不正确。它只在我重新启动服务器时发送数据,有时并不总是发送数据。我的堆栈是node.js,带有express和react。这是我的app.js文件 const server = require('http').createServer(app); const options = { cors: true, origins: ['http://127.0.0.1:3000'], 'force new connection': true, }; const io
const server = require('http').createServer(app);
const options = {
cors: true,
origins: ['http://127.0.0.1:3000'],
'force new connection': true,
};
const io = require('socket.io')(server, options);
io.on('connection', (socket) => {
console.log('connecting..', socket.id);
socket.on('chat', (chat) => {
console.log(chat);
if (chat) {
io.sockets.emit('chat', chat);
}
});
socket.on('remove', (socket) => {
console.log('user disconnected!');
});
});
server.listen(port, () => {
console.log('listening on port ' + port);
db.sync({
// force: true,
logging: false,
});
});
客户端在app.js中,我将套接字和io设置为如下
import { io } from 'socket.io-client';
const ENDPOINT = 'http://localhost:4000';
var socket = io(ENDPOINT, { forceNew: true });
并将其传递给我的组件
<Chatroom
user={user}
getAllMessages={getAllMessages}
setGetAllMessages={setGetAllMessages}
socket={socket}
io={io}
/>
您只发送了一个socket.emit('chat',personalMessage)代码>。您希望它如何多次发送数据?你在期待什么?我想我的问题是。如何让socket.emit在每次用户发送聊天信息时触发您应该在组件中创建
单击/输入事件处理程序,然后从那里而不是使用效果
const Chatroom = ({ user, getAllMessages, setGetAllMessages, socket, io }) => {
const [getMessages, setGetMessages] = useState();
const [userMessage, setUserMessage] = useState('');
const [getAllUsers, setGetAllUsers] = useState();
const [flag, setFlag] = useState(false);
const [personalMessage, setMessage] = useState();
const [getSocket, setSocket] = useState(socket);
useEffect(() => {
socket.on('connect', () => {
console.log('connected.');
});
socket.emit('chat', personalMessage);
return () => {
socket.emit('remove', () => {
socket.disconnect();
});
};
}, [socket, getSocket]);