【问题标题】:Socket.io client not working properlySocket.io 客户端无法正常工作
【发布时间】:2017-08-17 15:17:28
【问题描述】:

我使用以下方法创建了聊天应用程序

  1. 导轨
  2. Rabbitmq
  3. 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>

当我发送消息时,消息成功推送到队列并发送到套接字。问题是仅刷新页面且未删除消息时我可以收到消息。

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

【问题讨论】:

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

标签: ruby-on-rails node.js sockets


【解决方案1】:

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

我有以下代码用于发出数据

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

【讨论】:

    猜你喜欢
    • 2019-04-05
    • 2017-09-23
    • 2018-10-12
    • 1970-01-01
    • 2018-09-21
    • 2015-09-19
    • 1970-01-01
    • 1970-01-01
    • 2012-12-03
    相关资源
    最近更新 更多