socket.io - 服务器多次发出

时间:2017-07-04 15:11:22

标签: node.js express socket.io

我已经研究了近2天了,似乎无法找到答案。我正在尝试构建一个应用程序,我使用套接字通知我的前端服务器上的某些内容已发生变化。注意 - 我没有在前端使用任何操作(因此这使得这个问题与例如在此线程上找到的内容不同,例如: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;

// socketFile(同一目录)

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;

谢谢大家!

另外一个注意事项:在socketFile中我最初也有

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

但这似乎是不必要的,因为我不需要监听任何事情,只有当该路由器被外部API攻击时才会发出。在任何情况下结果都是一样的。要清楚的是,当访问socketFile中的路由并且它现在有一个custom_message(让我们称之为“hello world&#39;”)时,服务器会发出&#39; hello世界&#39;两次。

0 个答案:

没有答案