Javascript 套接字IO输出次数过多
这个问题已经回答了,但我一点也不明白。你可以在这个链接上找到它 我和这个家伙有同样的问题。我正试图用socket.io制作一个聊天程序,但当多个用户加入时,每条消息都会输出已连接用户的次数 例如,当一个用户连接时,他提交了一条消息。它输出一次。当两个用户连接时,每个用户的消息输出两次。 连接三个用户时,每个用户的消息输出三次 这是我的客户端代码:Javascript 套接字IO输出次数过多,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,这个问题已经回答了,但我一点也不明白。你可以在这个链接上找到它 我和这个家伙有同样的问题。我正试图用socket.io制作一个聊天程序,但当多个用户加入时,每条消息都会输出已连接用户的次数 例如,当一个用户连接时,他提交了一条消息。它输出一次。当两个用户连接时,每个用户的消息输出两次。 连接三个用户时,每个用户的消息输出三次 这是我的客户端代码: $('document').ready(function() { var server = io.connect('http://localh
$('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>");
});
});
谢谢大家! 您可以使用
socket.broadcast.emit()
向除该套接字之外的所有人发送:
var io = require('socket.io')(8888);
io.on('connection', function(socket) {
socket.on('message', function(message) {
socket.broadcast.emit('incoming', message);
});
});
更新:以下示例对我来说很好:
server.js
:
var app = require('http').createServer(handler);
var io = require('socket.io')(app);
var fs = require('fs');
app.listen(80);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.on('connection', function(socket) {
socket.on('message', function(message) {
socket.broadcast.emit('incoming', message);
});
});
index.html
:
$('document').ready(函数(){
var server=io.connect('http://localhost');
$('.chat').keydown(函数(事件){
if(event.which==13){
var$save=$(此);
emit('message',$save.val());
$save.val(“”);
返回false;
}
});
server.on('传入')函数(消息){
$('#textfield')。追加(“”+消息+””);
});
});
按enter键时,输入框中的消息仅向所有其他连接的socket.io用户显示一次。好的,我终于解决了问题 我用的是Express 4.0。这意味着,我使用路由来运行服务器,并且在路由中运行套接字io代码。每次用户连接时,都必须首先通过路由,并且都绑定到同一个套接字io上
感谢所有帮助过我的人 尝试将客户端套接字部分放在
$('document')之外。准备好事件。顺便说一下,您可以通过var io=require('socket.io')(8888)启动套接字
我不确定.sockets
的功能,但您并不真正需要它。如果我把它放在外面,那么jquery由于某种原因就不能工作了。只需放一些控制台.log(“就绪”)代码>在第二行。也许这个活动会被多次调用?是我做的。事实证明,socket_io.on('connection')的回调是获得额外请求的原因。但是我不知道如何修复它。所以一个客户端有多个连接?尝试将第三行放在$('document').ready
事件之外。如果我发送一条消息,它仍会发送两条消息。这完全没有意义。问题是客户端连接了不止一次。当它连接时,它会发出不止一个“连接”事件。我已经包含了一个前端和后端的示例,对我来说效果很好。谢谢,但我已经解决了这个问题。我没有给你们提供必要的信息来帮助你们。解决方案是?我不记得我完全记得的问题,因为它发生在一年前,但我记得解决方案是将Socket.IO侦听器从路由函数中移除。
var app = require('http').createServer(handler);
var io = require('socket.io')(app);
var fs = require('fs');
app.listen(80);
function handler (req, res) {
fs.readFile(__dirname + '/index.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}
io.on('connection', function(socket) {
socket.on('message', function(message) {
socket.broadcast.emit('incoming', message);
});
});