来自客户端的socket.io .emit不起作用在webpack服务器/客户端配置上

问题描述

使用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)
    });

}