Node.js socket.on未侦听事件
我正在使用react.js、node.js和socket.io创建一个简单的私人和群组聊天应用程序。我在表单提交上发出了一个事件。在服务器端和客户端,我倾听了那个事件 它在服务器端工作正常,但在客户端它没有监听事件。下面是我的客户端和服务器端代码: 服务器:Node.js socket.on未侦听事件,node.js,reactjs,socket.io,Node.js,Reactjs,Socket.io,我正在使用react.js、node.js和socket.io创建一个简单的私人和群组聊天应用程序。我在表单提交上发出了一个事件。在服务器端和客户端,我倾听了那个事件 它在服务器端工作正常,但在客户端它没有监听事件。下面是我的客户端和服务器端代码: 服务器: var users = {}; io.on('connection', function(socket){ socket.on('user_email', (data) => { console.log('u
var users = {};
io.on('connection', function(socket){
socket.on('user_email', (data) => {
console.log('user_email event called!');
users[data.email] = socket.id;
});
socket.on('sent_message',(data)=>{
console.log('data is ',data);
})
});
客户:
import socket from '../../socket';
handleSubmit(e){
e.preventDefault();
let email = window.localStorage.getItem('email');
let message = this.state.message;
if(message){
socket.emit('sent_message',{email:email,message:message});
}
socket.on('sent_message',(data)=>{
console.log('client side',data);
})
}
socket.js
import socketIOClient from "socket.io-client";
import { CONFIG } from './config';
export default socketIOClient(CONFIG.API_BASE_URL);
在客户端代码中,您有:
socket.emit('sent_message',{email:email,message:message});
// and
socket.on('sent_message',(data)=>{
console.log('client side',data);
})
在你们的服务器上
socket.on('sent_message',(data)=>{
console.log('data is ',data);
})
但是在您的服务器上,没有…emit('sent_message',…)
,因此您的客户端将永远不会收到任何东西
试用
io.to(socket.id).emit('sent_message', data);
在服务器代码中,在('sent_message',…)处理程序的
socket.on内,而不是console.log('data is',data)
在配置文件中,我可以在socket.on内使用socket.emit吗?使用io.to(socket.id).emit()
将发射发送到该套接字。如果您希望所有连接的客户端都能接收,您可以使用.broadcast()
,但现在,请尝试此方法来解决问题。另外,回答你的问题,你也应该能够做到。我正在实现群聊,所以我不需要使用io.to(socket.id).emit吗?如果你在进行群聊,你需要使用名称空间或聊天室来隔离谁收到了消息。它仍将广播,但仅限于订阅的用户,如/group1
,等等-请参见我添加的socket.broadcast.emit和socket.emit,现在它工作正常