乘以io.on(“ connection”)

伊利亚·P

每个页面更新后,我有+1套接字连接。

module.exports = function(io, client) {
var GameController = {
   gamePage: function(req, res) {
       client.hget('games', 'game.' + req.params.id, function (err, result) {
           if (err) return result(err);
           var game = JSON.parse(result);

           io.on('connection', function (socket) {
               console.log('send');
               console.log(socket.id);
               io.emit('get_bets', game.players);
           });

           res.render('pages/game', {
               title: 'Game - ' + req.params.id,
               user: req.user,
               game: game
           });
       });
   };
return GameController;
});

路由文件:

module.exports = function(io, client) {
   var express = require('express');
   var router = express.Router();
   var GameController = require('controllers/GameController')(io, client); 
   router.get('/:id', GameController.gamePage);
   ...
   return router;
};

客户端做出反应:

var Game = React.createClass({
   getInitialState: function() {
     this.socket = io();

     return {
         bets: null
     }
   },
 socketGetBets: function() {
   var that = this;
   this.socket.on('get_bets', function(data) {
       console.log('get bets');
       that.setState({ bets: data });
   });
   this.socket.on('rand', function(data) {
       console.log(data);
   });
 },
...

但是调试之后,我发现客户端没有问题。

app.js文件:

var socket_io = require('socket.io');

var io = socket_io();
app.io = io;
//route
var game = require('./routes/games')(io, client);

bin / www文件:

var server = http.createServer(app);

var io     = app.io;
io.attach( server );

页面更新后,io.on(“ connection”)事件在控制台中向我显示“发送”消息,第二页更新后,我具有“发送”,“发送”,第三次更新-“发送”,“发送”,“发送”等。比出现内存泄漏警告。控制台日志socked.id多次显示相同的值。

z

每次调用on,无论是io.on还是socket.on,都在注册一个事件处理程序。在这种情况下,您可能不想io.on('connection')在路由内部进行调用,因为每次访问该路由时都会注册一个新的连接处理程序。这就是为什么您看到控制台中记录了累积消息。

实际上,您可能根本不希望将快速路由与套接字函数混合使用,因为它们是不同的协议,并且可以彼此独立地工作。

// server side

// this should only be called once per connection.
io.on('connection', function (socket) {
  // handle socket protocol stuff.. fetching server data, sending data
  socket.on('fetch bets', function() {
    // get game.players from server       

    // updating other sockets
    io.emit('get_bets', game.players);
  })
})

app.get('/route', function (req, res) {
  // handle http protocol stuff.. fetching server data, sending data

  // send data back to caller
  res.json(data)
})

这同样适用于socket.on在您的客户端。似乎您'get_bets'每次调用时都会添加一个新的事件处理程序socketGetBets

相反,您可能想一次注册该事件处理程序,可能在componentDidMount或中componentWillMount另外,由于套接字连接可以视为您的应用程序的全局连接,因此您可以在应用程序上方创建连接。

// client side

var socket = io()

var Game = React.createClass({
  getInitialState: function() {
    return {
      bets: null
    }
  },
  componentWillMount: function() {
    var that = this
    socket.on('get_bets', function(data) {
      that.setState({ bets: data })
    })
  }
...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Turbolinks乘以绑定

来自分类Dev

数字精度,乘以100

来自分类Dev

将矩阵乘以向量

来自分类Dev

HttpURLConnection!Connection.getInputStream是java.io.FileNotFoundException

来自分类Dev

R for乘以2的循环

来自分类Dev

用输入乘以td

来自分类Dev

乘以多个texbox

来自分类Dev

乘以不同大小的数组

来自分类Dev

使用socket.IO的err_connection_refused

来自分类Dev

乘以理论

来自分类Dev

在PHP中乘以时间

来自分类Dev

如何删除io.on('connection')监听器?

来自分类Dev

ERR_CONNECTION_REFUSED http:// localhost:3000 / socket.io / socket.io.js

来自分类Dev

正整数乘以负值

来自分类Dev

同时乘以4 int

来自分类Dev

乘以下拉AngularJS

来自分类Dev

Socket.io,代码始终返回错误net :: ERR_CONNECTION_TIMED_OUT

来自分类Dev

Socket.IO ERR_CONNECTION_REFUSED

来自分类Dev

乘以BigInt

来自分类Dev

HttpURLConnection!Connection.getInputStream是java.io.FileNotFoundException

来自分类Dev

使用socket.IO的err_connection_refused

来自分类Dev

Node.js服务器上具有socket.io的ERR_CONNECTION_REFUSED

来自分类Dev

如何删除io.on('connection')侦听器?

来自分类Dev

nginx + nodejs + socket.io ERR_CONNECTION_TIMED_OUT

来自分类Dev

Openshift 2 ERR_CONNECTION_TIMED_OUT 上的 Socket.io 2.0.3

来自分类Dev

乘以 BigInt

来自分类Dev

io.on('connection', function(socket){})中的io.sockets.emit和socket.emit有什么区别?

来自分类Dev

Socket.io 与 Create-React-App - Connection_Refused 错误

来自分类Dev

Node + Mysql + Socket IO + PROTOCOL_CONNECTION_LOST