大佬教程收集整理的这篇文章主要介绍了node.js – 如何使用socket.io存储来自特定用户的套接字资源?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
client: socket.on('msgFromServer',function (data) { message = data['message'],from = data['from'],to = data['to']; if($('#chatBox.'+from).dialog("isOpen") === truE){ $('#chatBox.'+from+' #messageOutput textarea.readOnly').text(messagE); } else if(($('#chatBox.'+from).dialog("isOpen") !== truE)){ createChatBox(from,to,messagE); } }); server: var users = {}; io.sockets.on('connection',function (socket) { if( ( users.hasOwnProperty(req.session.Name) === falsE)) users[req.session.name] = socket; socket.on('msgToServer',function (data) { for (var u in users){ console.log("%s | %s",u,users[u]); } }); });
好吧,我将谈谈与服务器相关的代码结构.它负责将用户存储在“连接”事件上.当我重新加载页面时问题开始:它将用户从浏览器A存储在users对象中,如果我重新加载并重新连接再次存储它,但当我询问浏览器B中用户对象的内容时… …已经过时,并且没有显示与我在询问哪些是broser A中对象的内容时相同的结果,即使我正在尝试做一些无效的检验以存储val,如果用户为空 – > if((users.hasOwnProperty(req.session.Name)=== falsE)).基本上,我需要的是一种将每个套接字资源存储在一个容器中(实际上,不一定需要是一个对象)的方法,它具有一个标识符(req.session.Name),并且可以将这个容器用于所有会话中.所有浏览器,所以当服务器收到从浏览器A到浏览器B的消息时,它可以识别它并向浏览器B发出响应.
我从https://github.com/generalhenry/specificUser/blob/master/app.js和http://chrissilich.com/blog/socket-io-0-7-sending-messages-to-individual-clients/得到了我想要的东西
如果你仔细看看代码……在chrissilich.com,作者声明我们需要存储’socket.id'(用户[incoming.phonenumber] = socket.id),而在git generalhenry状态我们必须存储’socket'(users [myName] = socket)资源.后者是正确的,因为Socket.id的值在两个浏览器中往往是相同的……并且该值会自动更改,我不知道为什么会有…我想在早期版本的节点中它这样工作.
因此,除了其他可能的问题,至少你需要这样做,否则它将无法工作.我打赌你说所有浏览器的1个套接字是你每次都覆盖id(当我开始使用Socket.IO时发生在我身上)
作为一般规则,请记住您管理CONNECTIONS而非USERS …用户可以拥有多个连接!
在连接上
function onConnection( socket ) { var arr = users[incoming.phonenumber] || null; if( !arr ) users[incoming.phonenumber] = arr = []; if( arr.indexOf( socket.id ) === -1 ) arr.push( socket.id ); // Assigns socket id to user }
断开连接
function onDisconnect( socket ) { var arr = users[incoming.phonenumber] || null; if( !arr ) return; // Should not happen since an user must connect before being disconnected var index = arr.indexOf( socket.id ); if( index !== -1 ) arr.splice( index,1 ); // Removes socket id from user }
以上是大佬教程为你收集整理的node.js – 如何使用socket.io存储来自特定用户的套接字资源?全部内容,希望文章能够帮你解决node.js – 如何使用socket.io存储来自特定用户的套接字资源?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。