每个客户端重复相同的消息的socket.io房间
问题描述:
我使用房间发送一个'私人'消息到客户端,它的工作原理但是发送的消息是由我拥有的客户端数量重复的,我相信这是因为服务器的我.on('message')
,因为这仍然是触发为每个客户端而只发射到正确的客户端(但多次..)每个客户端重复相同的消息的socket.io房间
io.sockets.on('connection', function(socket {
socket.on('join', function(data)
{
console.log('enter');
socket.join(data.user);
});
var rClient = redis.createClient();
rClient.subscribe('messagex');
rClient.on('message', function(channel, message) {
io.in(message.user).emit('messagex', {content: message.content});
});
socket.on('disconnect', function() {
rClient.quit();
});
});
接收客户端
<script>
var username = prompt("test");
var socket = io.connect('http://localhost:8100');
socket.emit('join', {user: username});
socket.on('messagex', function(data) {
$('#messages').append('<p>' + data.content + '</p>');
});
所以我有3个客户端(每个不同的用户/间开)在接收器页面,我从发送方发送消息称用户USER1,然后我将只收到user1客户端上的消息,但每次都会收到3条相同的消息,重复的次数似乎是我拥有的客户端数量。
答
试试这个
subscribe.unsubscribe(channel);
当连接断开退订
io.sockets.on('connection', function(socket {
socket.on('join', function(data)
{
console.log('enter');
socket.join(data.user);
});
var rClient = redis.createClient();
rClient.subscribe('messagex');
rClient.on('message', function(channel, message) {
io.in(message.user).emit('messagex', {content: message.content});
});
socket.on('disconnect', function() {
rClient.unsubscribe('messagex');
rClient.quit();
});
});
答
我认为你正在使用的同一时间的Redis和socket.io双通道,你必须要单通道即socket.io才就没有必要做的Redis通道意味着当您通过发射/打开传输数据时不需要添加发布/订阅方法。
为什么使用'订阅'?只需使用一个房间向该特定用户广播该消息 – Subham
我使用redis并从php发布。发送'''消息时,我不会从客户端发送到服务器 – joe