socket.io - 服务器多次发出

2024-04-15

我已经研究了近两天,似乎找不到答案。我正在尝试构建一个应用程序,在其中使用套接字通知我的前端服务器上发生了某些变化。注意 - 我没有在前端使用任何操作(因此这使得这个问题与在此线程上找到的问题不同,例如:socket.io 多次发出 https://stackoverflow.com/questions/32265731/socket-io-emits-multiple-times)

不幸的是,服务器端的 socket.io 多次触发同一事件。从我读到的所有内容中,我了解到这是因为连接保持打开状态,并且每次服务器重新启动时都会触发连接。我应该有一种方法可以防止它发出重复的事件,但我似乎无法弄清楚。

这是我的服务器端代码:

// main file
const express = require('express');
const app = express();
const routes = require('./routes/index');

const server = app.listen(process.env.PORT || 3001, () => {
  console.log('listening on port 3001');
});

const io = require('socket.io')(server);
app.use('/sockets', socketFile(io))

module.exports = app;

//套接字文件(同一目录)

module.exports = function(io){

    var express = require('express');
    var router = express.Router();
    var request_m = require('request')

    router.post('/', function(req,res, next){

        const custom_message = req.body.custom_message

        io.sockets.emit('newMessage', {call: custom_message})

        next();  

    })
    return router
}

她是前端:

import React, {Component} from 'react';
import io from 'socket.io-client'
const socket = io('/');

class App extends Component  {
 constructor(){
   super()
 this.state={

 }
}

componentDidMount(){
  socket.on('newMessage', function (data) {
    this.setState({newMessage: data.call})
  }
}


render(){
  return (

    <div>        </div>

);
}

}

export default App;

谢谢你们!

附加说明:在套接字文件中我最初也有

io.on('connection', function(socket){
   ...
})

但这似乎是不必要的,因为我不需要监听任何内容,并且仅在该路由器被外部 API 命中时才发出。无论如何,结果都是一样的。需要明确的是,当访问 socketFile 中的路由并且它现在有一个 custom_message (我们称之为“hello world”)时,会发生什么情况......服务器会发出“hello world”两次。


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

socket.io - 服务器多次发出 的相关文章

随机推荐