用Node.js中的socket创建私人聊天室和公共聊天室
让我先给你看效果图:
在上一篇文章中,我们介绍了使用Angular、Nodejs和socket.io来构建聊天室和多人聊天室。本文继续介绍在Node.js中使用socket来创建私人聊天室和公共聊天室。详情请见下文。
在nodejs的应用中,socket应该是出彩的。socket.io在github上有上万颗星,它的成功应该不亚于express。为了方便理解socket.io的使用。
例如,请点击http://chat.lovewebgames.com/.
源代码下载https://github.com/tianxiangbing/chat
因为我太穷,国外免费使用服务器和数据库,访问速度可能会稍微慢一点。
先说说我对socket.io的理解。websocket更像是打开一个端口服务来监控过去的通信。因此,我们可以根据当前站点的端口80启动套接字服务,或者将其放在其他端口上,例如:
复制代码如下:require ('socket.io ')。听(3000);
这是为了监视端口3000。由于我用的免费服务器没有权限打开其他端口,所以我还是用80。因为80已经被快递用了,所以快递用的时候我不得不导入。
复制代码如下: varserver=http . create server(app);var socket=require('。/socket/msg ')(服务器);
然后我用msg.js写了这个
复制代码如下:vardb=require('./db/MySQL’);var SiO=require(' socket . io ');var IO=函数(服务器){var io=sio.listen(服务器)
这是和谐的。db是创建mysql连接的方法,这一部分不包括在内。
在socket.io中,首先创建一个io通道连接,然后监控里面的socket事件。nodejs是事件驱动的。代码如下:
复制代码如下:io.on ('connection ',function (socket) {console.log('用户已连接'));socket.on('disconnect ',function(){ console . log(' user disconnected ')。);});})
这时只要有用户连接,它就会进入连接,然后它的参数就是socket。如果是公开聊天,我们可以直接使用。
复制代码如下:io.emit('聊天消息',{ });
以这种形式。但是我们这里有私聊,所以需要暂时把这个socket对象保存在全局的情况下,让你私聊的对象可以使用它来找到你的socket。其实这里的私聊并不是完全点对点的,但是还是经过服务器,消息发送到服务器,然后服务器找到你要传达的人的socket对象,发送给他。这是整个过程。我用一个类数组对象把它存储在这里。
复制代码如下:var users={},usocket={ };socket.on('user join ',function(data){ users[username]=username;usocket[username]=socket;})
因为我需要一个用户名来登录这里,所以我使用用户名作为唯一标识符(这只是一个例子,不要和我谈论重复的用户名)。在这里使用类数组的好处是我可以不用循环就能快速找到它。当我给A发私聊的时候,我会先在这个uscoket里找到它,然后调用它的emit。
函数SendUserMSG(data){ if(data . to in usocket){ console . log('=================')console . log(' to ' data . to,data);usocket[data.to]。发出(' to' data.to,data);usocket[data.user]。emit('to' data.user,data);console . log('========================')} }我之所以在这里发出两次,是因为我在给对方发消息的时候,也想自己接收消息,然后显示出来。为什么呢?一是界面统一,聊天中的内容全部来自服务器。第二,证明我发成功了。
然后,当我在客户端监控时,我也用自己的用户名开始了一个事件监控。
socket.on('to '用户,函数(数据){ //console.log(数据);formatMsg(数据);})这样,我发送的消息和收到的消息都会进入这个事件。最后,不要忘记在用户离开时删除这个对象。
socket.on('disconnect ',function(){ console。如果(用户名){ counter-;删除用户[用户名];删除usocket[username];如果(家。name==username){ HomeLeave(用户名);} sendmsg({ type: 0,msg: '用户"用户名"离开聊天室,counter: counter,users 3360 users })});好了,这样就大功告成了。
版权声明:用Node.js中的socket创建私人聊天室和公共聊天室是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。