Ruby on rails Socket.io客户端工作不正常

Ruby on rails Socket.io客户端工作不正常,ruby-on-rails,node.js,sockets,Ruby On Rails,Node.js,Sockets,我已经创建了聊天应用程序使用以下 轨道 兔子 nodejs(带有amqplib/callback_api和socket.io) 我在服务器端有以下代码 var amqp = require('amqplib/callback_api'); var amqpConn = null; var app = require('http').createServer() var io = require('socket.io')(app); var fs = require('fs'); io.on(

我已经创建了聊天应用程序使用以下

  • 轨道
  • 兔子
  • nodejs(带有amqplib/callback_api和socket.io)
  • 我在服务器端有以下代码

    var amqp = require('amqplib/callback_api');
    var amqpConn = null;
    
    var app = require('http').createServer()
    var io = require('socket.io')(app);
    var fs = require('fs');
    
    io.on('connection', function (socket) {
            socket.emit('news/1', msg.content.toString());
            // socket.disconnect()
    });
    
    客户端

    <%= javascript_include_tag "http://localhost:53597/socket.io/socket.io.js"  %>
    <script>
    
    
    
    var socket = io('http://localhost:53597', {reconnect: true});
    
      socket.on('connect', function () {
        console.log('connected');
    
        socket.on('news/1', function (msg) {
          console.log('inside coming');
          console.log(msg);
        });
      });
    
    </script>
    
    
    变量套接字=io('http://localhost:53597“,{重新连接:true});
    socket.on('connect',function(){
    console.log('connected');
    socket.on('news/1',函数(msg){
    console.log('insidecoming');
    控制台日志(msg);
    });
    });
    
    当我发送消息时,消息成功推送到队列,消息被发送到套接字。问题是,只有刷新页面且消息未被删除时,我才能获取消息


    我不明白这里出了什么问题?

    最终我解决了我的问题,问题是我在连接事件中放置了emit函数,这样我可以在只建立连接时获取数据​, 连接是在页面加载时建立的,这就是我仅在页面加载时获取数据的原因

    我有以下用于发射数据的代码


    io.sockets.emit('news/1',msg.content.toString())

    最终我解决了我的问题,问题是我将emit函数放在了连接事件中,这样我就可以在只建立连接时获取数据​, 连接是在页面加载时建立的,这就是我仅在页面加载时获取数据的原因

    我有以下用于发射数据的代码


    io.sockets.emit('news/1',msg.content.toString())

    您是仅在连接事件期间调用
    套接字.emit
    ,还是代码中未显示对它的其他调用?否则,如前所述,它似乎只有一个emit。为了进行测试,您可以在服务器上由
    setInterval
    触发的函数中抛出一个
    socket.emit
    。另外,我不确定这些消息是否没有被删除,我在代码中没有看到任何正在进行删除的内容。@barry:您只是在连接事件期间调用socket.emit吗?是的,我唯一的要求是从rabbitmq队列获取消息,并将消息发送到侦听套接字。我在socket.io客户端遇到问题,但监听工作正常,因为当我停止nodejs服务器时,我可以在浏览器控制台中显示错误消息。很抱歉延迟,因为我不在开会。在任何情况下,正如我所说,如果只调用一次
    socket.emit(…)
    ,它将只发送一条消息。我不是RabbitMQ用户,但快速浏览一下文档,您想要的行为似乎可以通过从通道的
    consume()
    处理程序内部进行
    socket.emit()
    调用来实现。@barry很抱歉延迟,您的回答很有帮助,但解决问题后我可以理解。谢谢您是否仅在连接事件期间调用了
    套接字。emit
    ,或者您是否有代码中未显示的其他调用?否则,如前所述,它似乎只有一个emit。为了进行测试,您可以在服务器上由
    setInterval
    触发的函数中抛出一个
    socket.emit
    。另外,我不确定这些消息是否没有被删除,我在代码中没有看到任何正在进行删除的内容。@barry:您只是在连接事件期间调用socket.emit吗?是的,我唯一的要求是从rabbitmq队列获取消息,并将消息发送到侦听套接字。我在socket.io客户端遇到问题,但监听工作正常,因为当我停止nodejs服务器时,我可以在浏览器控制台中显示错误消息。很抱歉延迟,因为我不在开会。在任何情况下,正如我所说,如果只调用一次
    socket.emit(…)
    ,它将只发送一条消息。我不是RabbitMQ用户,但快速浏览一下文档,您想要的行为似乎可以通过从通道的
    consume()
    处理程序内部进行
    socket.emit()
    调用来实现。@barry很抱歉延迟,您的回答很有帮助,但解决问题后我可以理解。谢谢