NodeJS 如何解决React.js socket.io确认超时?

0yg35tkg  于 2022-12-18  发布在  Node.js
关注(0)|答案(1)|浏览(148)

我有一个Node.js和React.js应用程序,分别是服务器和客户端。我通过socket.io在它们之间发送数据,我试图实现acknoledgement,但我收到一个错误,说它已经超时:

Error: operation has timed out
at Timeout._onTimeout (C:\Project\gateway\node_modules\socket.io\dist\broadcast-operator.js:137:30)
at listOnTimeout (node:internal/timers:559:17)
at processTimers (node:internal/timers:502:7)

下面是我的服务器代码,message变量打印Error: operation has timed out

socket.emit((topic, message),function(message) {
        console.log('GOT MESSAGE');
        console.log(message);
    });

下面是我的客户端代码:

ioClient.on('triton/acs', (data, callback) => {
    callback("Message for server")
 }


为什么这是不工作,如何修复它?

tpgth1q7

tpgth1q71#

正如@darvine提到的,没有太多的代码来了解如何实现socket.io服务器端和客户端,但是,从我上面看到的,我尽我所能地回答你的问题,因为我看到了一些语法错误。
您的后端代码:

socket.emit((topic, message),function(message) {
    console.log('GOT MESSAGE');
    console.log(message);
});

看起来您没有建立到客户端的连接。您可以通过执行以下操作来实现。另外,socket.emit正在向客户端发送数据。(.emit中没有回调函数)。您将数据作为第二个参数发送。如果您想从客户端接收数据,则使用.on('listener',cb)。请参阅以下内容;

//establish connection to the client
io.on('connection', (socket)=> {
      //sending a message to the client
      socket.emit('yourSentMessage', 'you are sending this message to the client');
      
      //receiving a message from the client.
      socket.on('yourReceivedMessage', (msg) => {
                console.log(msg) //this message was received from the client
             });
     });

在前端,适当地提供套接字示例是很重要的。我将使用API。有关这方面的更多信息,请参见this article。您可以在提供程序中 Package 组件,并访问套接字示例。同样,在前端区分.emit和.on也很重要。如果您想将数据发送到后端,你使用.emit(没有回调)。如果你从后端接收数据,你使用.on('listener',cb)。
最后,react要求你在localhost上运行时设置代理服务器,你可以在package.json文件中设置,如下图所示:

相关问题