Я создал приложение чата, используя следующие
- Рельсы
- Rabbitmq
- 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
только во время события подключения или у вас есть другие вызовы, не показанные в вашем коде? В противном случае, как написано, кажется, что у него будет только один выброс. Просто для проверки вы можете добавитьsocket.emit
в функцию, запускаемуюsetInterval
на сервере. Кроме того, не уверен, что сообщения не удаляются, я ничего не вижу в коде, который выполняет какое-либо удаление. - person barry-johnson   schedule 24.03.2017socket.emit(...)
только один раз, он отправит только одно сообщение. Я не пользователь RabbitMQ, но из беглого взгляда на документы кажется, что нужное поведение будет достигнуто путем выполненияsocket.emit()
вызовов внутриconsume()
обработчика канала. - person barry-johnson   schedule 25.03.2017