Javascript Node.js Websocket聊天应用程序:客户端接收重复消息
我是Node.js的新手。我正在尝试使用Node.js、websocket实现一个聊天应用程序。我在服务器端使用的代码:Javascript Node.js Websocket聊天应用程序:客户端接收重复消息,javascript,node.js,websocket,Javascript,Node.js,Websocket,我是Node.js的新手。我正在尝试使用Node.js、websocket实现一个聊天应用程序。我在服务器端使用的代码: var config = require('someconfigure'), socketServer = require('somewebsocketapi').server; var clients = [ ]; socketServer( 'example', function ( connection, server ) { var index
var config = require('someconfigure'),
socketServer = require('somewebsocketapi').server;
var clients = [ ];
socketServer( 'example', function ( connection, server ) {
var index;
connection.on('open', function ( id ) {
index = clients.push(connection) - 1;
console.log('[open]');
});
connection.on('message', function ( msg ) {
console.log(msg);
var content = JSON.parse(msg.utf8Data);
var author = content.action.data[0].author;
var channel = content.action.data[0].channel;
var text = content.action.data[0].text;
var time = (new Date()).getTime();
console.log(author+text+channel);
// send messsage to all clients
var obj = JSON.stringify(
{
command:"messages",
data: [
{
timestamp: time,
text: text,
author: author,
channel: channel
}
]
}
);
console.log("Number of clients "+clients.length);
for (var i=0; i < clients.length; i++) {
if(clients[i]!= connection)
clients[i].send(obj);
}
});
connection.on('error', function ( err ) {
console.log(err);
});
connection.on('close', function(){
console.log((new Date()) + " Peer "
+ index + " disconnected.");
// remove user from the list of connected clients
clients.splice(index, 1);
});
}).config( config );
var config=require('someconfigure'),
socketServer=require('somewebsocketapi').server;
var客户=[];
socketServer('示例',函数(连接,服务器){
var指数;
连接.on('open',函数(id){
索引=客户端。推送(连接)-1;
console.log(“[open]”);
});
connection.on('message',函数(msg){
控制台日志(msg);
var content=JSON.parse(msg.utf8Data);
var author=content.action.data[0]。作者;
var channel=content.action.data[0]。通道;
var text=content.action.data[0].text;
var time=(新日期()).getTime();
console.log(作者+文本+频道);
//向所有客户端发送消息
var obj=JSON.stringify(
{
命令:“消息”,
数据:[
{
时间戳:时间,
文本:文本,
作者:作者,,
频道:频道
}
]
}
);
console.log(“客户端数量”+客户端长度);
对于(变量i=0;i
我面临的问题是,客户收到了重复的消息。例如,如果连接了5个客户端,那么所有客户端都将收到相同的消息5次
我知道我错过了一些东西,但我怎样才能弥补呢?提前感谢您的帮助。问题是您正在为每个客户端而不是客户端本身存储“连接”(适用于所有客户端),因此您正在为所有客户端发送N次消息。如果您对单个控件感兴趣,只需删除的循环就可以了,或者将实际的客户端存储在
on('open',…)
中。那么我如何分别保存所有客户端呢?您使用的是socket.io,然后是on('open',function(socket){}中回调的第一个参数代码>是“套接字”,而不是“id”。你应该把它保存起来。在我不知道的其他实现中,您可能应该检查它们的文档。检查以下示例: