节点。js + socket . io怎么实现点对点随机匹配聊天

  介绍

这篇文章将为大家详细讲解有关节点。js +套接字。io怎么实现点对点随机匹配聊天,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

先说说用到的东西,用节点来做后台服务,表达用来托管静态资源,然后插座。io用来传送聊天数据。接下来说说思路,其实用插座。io来传数据是很简单的一件事情,我们只需要再前端页面引入socket.io.js 然后再节点端也需要(& # 39;socket . io # 39;),把它在后端跑起来,那么前端就可以通过如下代码来发送或者接收信息。

//前端   时间=socket  io.connect (& # 39; ws://& # 39; + & # 39;服务器ip # 39;);   socket.emit(& # 39;味精# 39;,{味精:& # 39;前端要发送的信息& # 39;});//要发送的信息(以对象的形式发送)   on (& # 39; msg2& # 39;功能(数据){   ,,…//这才能里的数据是后端传过来的信息   })//后端   on(& # 39;味精# 39;功能(数据){   var 才能;data =,数据;,//这里的数据就是前端传过来的数据,即{味精:& # 39;前端要发送的信息& # 39;}   console.log才能(data.msg),//,打印出,“前端要发送的信息”   })//同理,后端要传信息给前端也是一样   socket.emit (& # 39; msg2& # 39;,{味精:& # 39;后端要发送的信息& # 39;});

我们来看后端怎么把套接字跑起来

, var  express =,要求(& # 39;表达# 39;);   var  app =,表达();   var  http =,要求(& # 39;http # 39;) .Server(应用);   var  io =,要求(& # 39;socket . io # 39;) (http);   io.on(& # 39;连接# 39;,,函数(插座){,//当前端执行,socket =, io.connect (& # 39; ws://& # 39; +主机),,的时候,此处的io会监听到连接事件   ,on(& # 39;味精# 39;功能(数据){,   ,io.emit (& # 39; onlineCount& # 39;, freeList)   ,//如果直接用io.emit来发送数据的话,这代表广播的形式,就是当前所有打开服务的前端页面都会收到这条消息。   ,   ,,socket.emit(& # 39;欢迎# 39;,{味精:& # 39;欢迎……& # 39;})//这里将给当前连接的页面发送一个欢迎的对象数据   ,})   ,on(& # 39;断开# 39;函数(){   ,//当前端页面关闭,或者失去连接时,后端会接收到断开事件   ,,   ,})      })   http.listen(4000,函数(){   ,console.log (& # 39; listening 提醒*:4000 & # 39;);   });

当然不仅如此,因为websocket协议,是在浏览器和服务器之间建立了一个长链接来相互传输数据,对服务器而言,如果打开了好几个页面,那么就有好几个插座实例,每个建立连接的前端页面都会有一个套接字实例,这样就为接下来的点对点私聊提供了思路。当然,我们也可以通过直接广播来传送信息,不过这适用于聊天室情景。

那如何实现点对点呢,之前说了,每个建立连接的页面都会产生一个套接字实例,那么我们只需要后端在接收消息的同时,判断该套接字实例是和哪个个实例在聊的天,只把消息发送给另一个匹配的插座实例就好了。简单来说就像写信一样,我把消息发送给后端,然后告诉后端,这个消息是给xxx的,然后后端找到xxx对应的套接字实例,将消息发给他就好了。

//前端   时间=window.id  new 日期().getTime () +““+ Math.floor (math . random () * 899 + 100);//每次登录,获取一个唯一的用户id   时间=socket  io.connect (& # 39; ws://& # 39; +主机);   socket.emit(& # 39;分类列出,,{,user_name :名称,user_id :, id})//建立连接后,将我的用户名和身份证都传给后端//后端   on(& # 39;分类列出# 39;功能(数据){   ,var  nickname =, data.user_name,   时间=user_id 才能;data.user_id;   ,userServer [user_id],=,套接字;   ,//后端接收后,将该用户插座保存在一个对象里,键值为id,就价值是这个用户的插座   ,,   })

通过上面的代码,后端得到了一个userServer的对象,里面是每个连接插座和其id的对应值,这样,就可以通过每次发送信息时,附带要接收对象的id来达到点对点的数据传输。

关于”节点。js + socket . io怎么实现点对点随机匹配聊天”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看的到。

节点。js + socket . io怎么实现点对点随机匹配聊天