Създадох приложение за чат, използвайки следното
- Релси
- 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