[英]JS socket.io client doesn't catch an emitted event
我正在使用基於 Python 的 socketio 服務器和 JS socketio 客戶端。 工作流程大致如下: client emits <<action1>>
-> server receives <<action1>>
-> server performs some calculations
-> server emits <<action2>>
-> client receives <<action2>>
它應該可以工作在一個循環中。
問題是由於某種原因沒有執行最后一步,客戶端似乎沒有捕獲action2
事件。 我可以看到它已從服務器日志中觸發,它們聲明: emitting event "action2" to all [/]
服務器:
@sio.on('action1')
def handle_analysis():
... some calculations ...
sio.emit('action2')
客戶:
import { io } from "socket.io-client";
export const socket = io("http://localhost:5550",
{
timeout: 200000
});
async runCalculations() {
console.log('progress1');
let stdoutChunks: string = '';
const getCalculations = () => {
socket.emit('action1');
return new Promise((resolve, reject) => {
socket.on('action2', (msg) => {
stdoutChunks += msg;
resolve(stdoutChunks);
})
});
};
await getCalculations()
console.log('progress2');
return {};
}
progress2
永遠不會被記錄,因為 js 一直在等待getCalculations
函數。 誰能指出問題可能出在哪里? 每次計算大約需要 50 秒,我想知道這是否可能是原因。 我對不同的事件使用了相同的方法,這些事件花費的時間要少得多,而且效果很好,服務器與客戶端通信沒有問題。
我對 python-socket.io 不是那么好/精通,但不是在Client的runCalculations()中定義的getCalculations()方法。 因此, await getCalculations()不會直接工作,而且在服務器中也不應該sio.emit('action2')也有像這樣的第二個參數sio.emit('action2', 'hello') 。 希望,這可能有用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.