NodeJS socket.io not able to emit to all the connected clients

mfuanj7w  于 2022-12-03  发布在  Node.js
关注(0)|答案(1)|浏览(114)

我使用socket.io-fiddle https://github.com/socketio/socket.io-fiddle,尝试每隔10 s连续发送io.emit,但是我连接的客户端仍然没有收到任何消息。
主要问题是无法将emit消息发送到套接字连接列表中的每个人。
还观察到,也不能向房间发送消息。房间似乎总是空的。
所用代码:

import { default as express } from 'express';
import { createServer } from 'http';
import { Server } from 'socket.io';

const app = express();
const httpServer = createServer(app);
const io = new Server(httpServer, {
    cors: {
        origin: true,
        methods: ['GET', 'POST'],
        allowedHeaders: ['pythonusername', 'pythonpassword', 'authorization'],
        credentials: true,
    },
});

const port = process.env.PORT || 3001;

app.use(express.static('public'));

io.on('connection', (socket) => {
    console.log(`connect ${socket.id}`);
    socket.on('join_chat_group', function (data) {
        console.log('event=join_chat_group');
        socket.join('chat1');
    });

    socket.on('disconnect', (reason) => {
        console.log(`disconnect ${socket.id} due to ${reason}`);
    });
});

setTimeout(() => {
    io.emit('hello', 'name=sant=toallclients');
}, 1 * 1000);

httpServer.listen(port, () => {
    console.log(`server listening at http://localhost:${port}`);
});

ReactJS代码如下所示

import { useState, useEffect } from 'react';
const socket = io('ws://localhost:3001', {
    transportOptions: {
        polling: {
            extraHeaders: {
                pythonusername: 'ciR1QorvFx1U',
                pythonpassword: 'ENTzh1mrIeq',
            },
        },
    },
    transports: ['polling'],
});

function App() {
    const [isConnected, setIsConnected] = useState(socket.connected);
    useEffect(() => {
        socket.on('connect', () => {
            setIsConnected(true);
            socket.emit('join_python_discovery', 'react');
            socket.emit('join_chat_group', 'react');
        });

        socket.on('disconnect', () => {
            setIsConnected(false);
        });
        socket.on('Start1234', function (data) {
            console.log(data, 'hello');
        });
        socket.on('hello', function (data) {
            console.log(data, 'hello');
        });
        // socket.on('pong', () => {
        //  setLastPong(new Date().toISOString());
        // });

        socket.emit('my message', `{name:'santhosh'}`);

        return () => {
            socket.off('connect');
            socket.off('disconnect');
            socket.off('hello');
            socket.off('Start1234');
        };
    }, []);

    return (
        <div className="App">
            <h1>UI</h1>
        </div>
    );
}

export default App;

有些东西还没有找到,有人能帮我吗?
版本:”socket.io“:“^4.0.0”

e0bqpujr

e0bqpujr1#

请在以下位置尝试:https://github.com/socketio/socket.io-fiddle

客户端.js

var io = require('socket.io-client');
var socket = io.connect('http://localhost:3000', {reconnect: true});

socket.on("connect", () => {
  console.log(`connect ${socket.id}`);
});

socket.on("connect_error", (err) => {
  console.log(`connect_error due to ${err.message}`);
});

// add listening event
socket.on("test", (data) => {
  console.log(data);
});

socket.on("disconnect", (reason) => {
  console.log(`disconnect due to ${reason}`);
});

服务器.js

import { default as express } from "express";
import { createServer } from "http";
import { Server } from "socket.io";

const app = express();
const httpServer = createServer(app);
const io = new Server(httpServer, {});
 
const port = process.env.PORT || 3000;

app.use(express.static("public"));

io.on("connection", (socket) => {
  console.log(`connect ${socket.id}`);

  // to send message to cliente
  socket.emit('test', {message: "hello"})

  socket.on("disconnect", (reason) => {
    console.log(`disconnect ${socket.id} due to ${reason}`);
  });
});

httpServer.listen(port, () => {
  console.log(`server listening at http://localhost:${port}`);
});

相关问题