【发布时间】:2019-07-12 03:23:44
【问题描述】:
我正在尝试在 socket.io 中创建多个 axios 请求。如果我同时有:
socket.emit ("Emit1", req1.data);
socket.emit ("Emit2", req2.data);
socket.emit("Emit2", req2.data); 有效。 socket.emit ("Emit1", req1.data); 不起作用。
当我删除 socket.emit("Emit2", req2.data); --> emit1 工作。
如何将其结合起来,使其同时发挥作用?
我可以创建两个服务器吗?一个支持第一个组件和请求获取url1 和支持请求url2 的第二个服务器?
const Emit = async socket => {
try{
const [req1, req2] = await Promise.all([
axios.get(url1, {
headers: {
}
}),
axios.get(url2, {
headers: {
'Authorization': `Bearer ${token}`
}
})
]);
socket.emit("Emit1", req1.data);
socket.emit("Emit2", req2.data);
}
catch(error){
console.log(error)
}
};
客户
第一个组件:
import socketIOClient from "socket.io-client";
componentDidMount() {
axios.get
axios({
url,
method: "GET",
headers: {
'Authorization': `Bearer ${token}`
}
})
.then(res => {
this.setState({
scores: res.data,
activeTab: res.data[0].id
});
})
.catch(error => {
console.log(error);
})
}
componentDidUpdate(prevProps, prevState) {
const endpoint = 'http://127.0.0.1:3000';
if (prevState.scores !== this.state.scores) {
const socket = socketIOClient(endpoint);
socket.on("Emit1", data => this.setState({
scores: data
}));
}
}
第二部分:
import socketIOClient from "socket.io-client";
componentDidMount() {
axios.get
axios({
url,
method: "GET",
headers: {
'Authorization': `Bearer ${token}`
}
})
.then(res => {
this.setState({
abcd: res.data
});
})
.catch(error => {
console.log(error);
})
}
componentDidUpdate(prevProps, prevState) {
const endpoint = 'http://127.0.0.1:3000';
if (prevState.abcd !== this.state.abcd) {
const socket = socketIOClient(endpoint);
socket.on("Emit2", data => this.setState({
abcd: data
}));
}
}
【问题讨论】:
-
你的处理函数是什么?你是如何处理这两个事件的?您可以在问题中发布吗?
-
@AritraChakraborty 它在客户端是如何运作的?这就是你的意思?
-
是的。客户端代码。
-
@AritraChakraborty 我更新了我的问题
-
我认为您发送到不正确的套接字。你能用
io.emit代替socket.emit吗?io是你的socket-io 实例。
标签: javascript node.js reactjs socket.io axios