问题描述
使用SOCKET.IO时,客户端的.emit()不起作用。 我正在localhost中使用两个不同的客户端和服务器Webpack配置。 我正在尝试从客户端发出消息,服务器正在监听并且在客户端上打印该消息之后。 这里的代码:
server.js
<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
client.js (导入到index.js中)
const server = require('http').createServer();
const io = require('socket.io')(server,{
cors: {
allowedHeaders: ['Content-Type,Authorization,Content-Length,X-Requested-With']
}
});
const port = process.env.PORT || 3000;
io.on('connect',onConnect);
server.listen(port,() => console.log('server listening on port ' + port));
function onConnect(socket){
socket.emit('chat','Hello from Server');
socket.on('chat',function(msg) {
socket.emit(msg)
});
}
结果:
var socket = io('http://localhost:3000');
console.log('init');
socket.on('connect',onConnect);
function onConnect() {
console.log('connect ' + socket.id);
socket.on('disconnect',() => console.log('disconnect ' + socket.id));
socket.emit('chat','Hi from Client');
socket.on('chat',function(msg) {
console.log(msg)
});
}
我也分享了我的webpack的配置,也许它们很有用... 它们是2个不同的配置文件。客户端使用target:web运行,否则服务器使用target:node运行。
webpack.server.config.js
init
connect 5ePdFlYijgD6n9AoAAAH
Hello from Server
webpack.config.js
const path = require('path');
module.exports = {
mode: "development",entry: './src/server.js',target: 'node',output: {
path: path.resolve(__dirname,'dist'),filename: 'server.js'
}
};
解决方法
问题出在服务器连接上。应该使用io.sockets.on()而不是io.on()。 我分享了正确运行的正确server.js代码。
server.js
const server = require('http').createServer();
const io = require('socket.io')(server,{
cors: {
allowedHeaders: ['Content-Type,Authorization,Content-Length,X-Requested-With']
}
});
const port = process.env.PORT || 3000;
server.listen(port);
io.sockets.on('connect',onConnect);
let msgs = []
function onConnect(socket){
socket.emit('load',msgs)
socket.on('message',function(msg) {
socket.emit('messages',msg)
socket.broadcast.emit('messages',msg)
msgs.push(msg)
});
}