2015-09-08 112 views
0

我用几个模块的工作,一切都就地除外socket.io并不总是工作的事实...Socket.io并不总是工作

我们已经有了一些“路线”我们已经在Socket.io中使用了,它们都很棒,每次都能工作!

但现在,我们正在推出一个新的
'order/new',它应该显示每一个新订单包含的内容。

创建了一个新的订单get,通过队列发送消息,我们通过GET请求进行检索,并使用Socket.io将其发送给用户。

但是emit函数并不总是'emit'(?!)... 任何人都可以帮助我吗?

服务器:

io.on('connection', function (socket) { 
    // somewhere else calls this function, nothing wrong here... 
    function (mes) { 
     console.log('New order received: ', mes); 
     var doc_id = JSON.parse(mes)._id; 
     request 
      .get(urls['order/get'].replace(':id', doc_id)) 
      .end(function (err, res) { 
       console.log(err); 
       if (res.ok) { 
        console.log(chalk.green('OK: [GET] - ORDER/GET - ORDER_ID: ' + doc_id)); 
        // The above console.log get's called, so still working... 
        socket.emit('order/new', res.body); 
        // THIS socket.emit is called randomly, it doesn't work everytime... 
       } else { 
        console.log(chalk.red('ERROR: [GET] - ORDER/GET - ' + res.text)) 
       } 
      }); 
    } 

阵线(反应):

var OrdersViewer = React.createClass({ 

    setNewOrder (order) { 
     console.log("new order gotten nr.", this.state.orders.length); 
     // this doesn't always get called... 
     var orders = _.cloneDeep(this.state.orders); 
     orders.push(order); 
     this.setState({orders}); 
    }, 

    componentDidMount() { 
     socket.on('order/new', this.setNewOrder) 
    }, 

    render() { 
     // renders stuff 
    } 
}); 

如果需要任何更多的信息,请在下面 一切是最新的评论这样说(Node.js的, React.js,Socket.io等)

回答

0

我看到setNewOrder的一个问题。

var OrdersViewer = React.createClass({ 

      setNewOrder (order) { 
        console.log("new order gotten nr.", this.state.orders.length); 
        // this doesn't always get called... 
        var orders = _.cloneDeep(this.state.orders); 
        orders.push(order); 
        //this.setState({orders}); 
        this.setState({orders: orders}); 
      }, 

      componentDidMount() { 
        socket.on('order/new', this.setNewOrder) 
      }, 

      render() { 
        // renders stuff 
      } 
    }); 
+0

没有问题,那有效;) – CreasolDev