【发布时间】:2019-06-15 22:13:47
【问题描述】:
在客户端的套接字事件中遇到了一些意想不到的功能。我有两个客户加入了 socket.io 房间。他们已成功加入,如我的服务器控制台日志中所示。客户端,事件发送成功,服务器成功接收。服务器正在向房间中的两个客户端发送事件,发送者和另一个客户端。 只有发送客户端接收第一次尝试。在所述半失败尝试之后,如果另一个客户端尝试相同的套接字发射,则服务器成功地向两个客户端发送。 .emit() 和 .on() 在组件函数中。
有趣的是,如果将服务器事件的.on() 放在类的之外,那么第一次一切正常。
组件:
import stuff
const socket = io("http://172.**.**.***:3000");
// example '.on()' that works correctly
socket.on("test", () => {
alert("response from outside component");
});
export default class Lobby extends React.Component {
constructor() { }
onTest(socket) {
alert("outgoing alert");
socket.emit("test", {
room: this.state.room
});
// '.on()' that doesn't work correctly
socket.on("test", () => {
alert("incoming client alert")
});
}
render() {
<View>
<TouchableOpacity onPress={() => this.onTest(socket)}>
<Text>Press me </Text>
</TouchableOpacity>
</View>
}
服务器事件:
io.on("connection", socket => {
console.log("user connected with socket id:" + socket.id);
socket.on("test", test => {
console.log(received from client, emitting to room #:" + test.room);
io.to(test.room).emit("test");
});
}
【问题讨论】:
-
切换顺序,您的代码将起作用,即
socket.emit在socket.on下,但会在每次点击时添加重复事件。
标签: javascript react-native socket.io