socket.io emit 只对一个用户有效?

socket.io emit only working for one user?

我正在尝试将 socket.io 实施到 React 应用程序中。我已经按照文档进行操作,但是我正在努力让 'two browser windows' 或 'emulating two devices' 相互通信。

我的实现工作正常,但是当我向服务器发出更改时,它仅在 window 或进行更改的设备上被拾取,而其他客户端不会看到发射。

任何人都可以告诉我哪里出错了,以及我如何才能让其他客户接受更改?

server.js

const server = require("http").createServer();
const io = require("socket.io")(server, {
    cors: {
        origin: "*"
    }
});

io.on('connection', socket => {
    console.log('User Connected:' + socket.id);

    socket.on('child-login', (data) => {
        console.log(data);
        console.log(socket.id);
        socket.emit('child-login', data);
    })

});

server.listen(3001, () => {
    console.log('Server Running....')
});

react组件js

import api from "../utilities/api";
import { useState } from "react";

import { io } from 'socket.io-client';

const socket = io('http://localhost:3001');

socket.on('child-login', (data) => {
    document.querySelector('.js-last-login').innerHTML = data;
});

function Dashboard() {

    const loginChild = e => {
        e.preventDefault();
        let self = e.target;
        socket.emit('child-login', e.target.innerHTML);
    }

    return (
       <div>
            <ul>
                <li>
                    <a onClick={loginChild}>Walter Melon</a>
                </li>
                <li>
                    <a onClick={loginChild}>Teri Dactyl</a>
                </li>
            </ul>
           <h1 className="js-last-login"></h1>
       </div>
    );
}

export default Dashboard;

在你的情况下 - 只需使用

io.emit('child-login', data)

而不是

socket.emit('child-login', data);

仅向 'source' 套接字发出事件。

在这里您可以阅读更多关于 broadcasting 的信息。