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 的信息。
我正在尝试将 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 的信息。