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(
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很抱歉延迟,您的回答很有帮助,但解决问题后我可以理解。谢谢