本地连接在哪里 wifi怎么办理和安装( 四 )

  
文章插图  
用户登录  
还记得前端触发的登录事件叫什么嘛  
socket.emit( 'login', nickname);  
叫 login,而且还携带了一个参数——用户想给自己起的昵称 nickname 。好,我们来写对应的后台逻辑  
socket.on( 'login', function(nickname){  
//do something  
});  
这里的do something要做什么呢?即对用户输入的昵称进行合法性校验,比如是否已经存在、长度限制、符号限制等 。球都麻袋,好像有哪里不对…  
长度限制和符号限制?这俩哥们根本就不用放在服务器上做嘛,直接在前端就搞了 。所以我们的问题只剩一个了——昵称的唯一性 。  
既然要检测昵称是否唯一,首先得有一个当前在线用户昵称的总集,不然去哪里检测昵称是否存在嘞?  
所以要在全局维护一个数组,保存当前在线用户的昵称  
varusers = [];  
在这个数组里找用户通过 login 事件传过来的 nickname,如果不存在,说明当前昵称合法,用户可以叫这个名字,那么  
socket.nickname = nickname; //记录下当前socket的nicknameusers.push(nickname);socket.emit( 'loginSuccess'); //触发loginSuccess事件  
如果昵称已经存在了,就触发一登录失败事件,前端再做相应的交互即可 。  
socket.emit( 'loginFailed'); 接收用户发送的消息并  
按照约定好的事件名来写服务端的监听程序  
socket.on( 'msgSend', function(msg){ socket.broadcast.emit( 'newMsg', socket.nickname, msg);});  
这里调用的 api 是 socket 的广播事件,效果是广播消息到除了当前 socket 以外的所有 socket 。  
系统消息的处理  
剩下的工作就是处理系统消息了,首先要明确有哪些系统消息  
提示用户加入  
提示用户离开  
更新在线用户数  
提示用户加入  
提示用户离开  
更新在线用户数  
当用户输入的昵称通过合法性校验以后,系统提示新加入的用户  
io.sockets.emit( 'system',nickname, users.length, 'login');  
io.sockets.emit()  
的作用是向当前所有 socket 触发一个事件,这里要区别于socket.broadcast.emit() 。  
仿照上面的代码,写出当用户离开时的广播事件:  
io.sockets.emit( 'system', nickname, users.length, 'logout');  
但是要写在哪里呢?这时候,就需要在服务端额外的监听一个断开事件  
socket.on( 'disconnect', function(){  
varindex = users.indexOf(socket.nickname); users.splice(index, 1); //将断开用户的昵称从全局数组users中删除io.sockets.emit( 'system', socket.nickname, users.length, 'logout');}); 总结  
至此,一个基于 Node.js 的聊天室就算撸成了,当然还有许多可以优化的地方,不过核心功能也就这些,能看到这里的都是好汉,因为自己写完看了一遍,感觉真像是老太太的裹脚布——又臭又长  
【本地连接在哪里 wifi怎么办理和安装】?? 阅读原文,拥有更好的阅读体验,也可以关注作者个人公众号进行进一步交流 。  


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。