簡體   English   中英

JS socket.io 客戶端沒有捕捉到發出的事件

[英]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 不是那么好/精通,但不是在ClientrunCalculations()中定義的getCalculations()方法。 因此, await getCalculations()不會直接工作,而且在服務器中也不應該sio.emit('action2')也有像這樣的第二個參數sio.emit('action2', 'hello') 希望,這可能有用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM