【发布时间】:2015-10-27 05:59:14
【问题描述】:
这个问题已经回答了,但我完全看不懂。您可以在此链接中找到它。
socket.on calls its callback too many times
我和这个人有同样的问题。我正在尝试用socket.io做一个聊天程序,但是当多个用户加入时,每条消息都会输出连接了多少用户的次数。
例如,当一个用户连接时,他提交了一条消息。它输出一次。当两个用户连接时,他们的每个消息都会输出两次。 当三个用户连接时,他们的每个消息输出 3 次。
这是我的客户端代码:
$('document').ready(function() {
var server = io.connect('http://localhost:8888');
$('.chat').keydown(function(event){
var save = this;
if(event.which == 13){
server.emit('message', $(save).val());
$(save).val('');
return false;
}
});
server.on('incoming', function(message){
$('#textfield').append("<p>" + message + "</p>");
});
});
这是我的服务器端代码:
var socket_io = require('socket.io').listen(8888).sockets;
socket_io.on('connection', function(socket){
socket.on('message', function(message){
socket_io.emit('incoming', message)
});
});
谢谢!
【问题讨论】:
-
尝试将客户端套接字部分放在
$('document').ready事件之外。顺便说一句,您可以通过var io = require('socket.io')(8888);启动套接字。我不确定.sockets是做什么的,但您并不需要它。 -
如果我把它放在外面,那么 jquery 由于某种原因无法工作。
-
只需在第二行添加一些
console.log("ready");。也许该事件被多次调用? -
我做到了。事实证明 socket_io.on('connection') 的回调是获得额外请求的原因。我不知道如何解决它。
-
那么一个客户端有多个连接?尝试将第三行放在
$('document').ready事件之外。
标签: javascript node.js socket.io