如何使用socket . io实现消息实时推送功能

介绍

本篇文章给大家分享的是有关如何使用Socket . io实现消息实时推送功能,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

<强>插座。io介绍

插座。io是一个用JavaScript实现的实时双向通信的库,利用它来实现我们的功能会很简单。

插座。io包含两个部分:

<李>

服务器端(服务器):运行在节点。js服务器上

<李>

客户端(客户端):运行在浏览器中

可以看看如下的插座。io的示例代码,它给出了套接字。io发出及监听事件的基本用法:

 io.on(& # 39;连接# 39;,,函数(插座){,,socket.emit(& # 39;请求# 39;,,/*,*/),,//,emit  an  event 用,socket ,, io.emit(& # 39;广播# 39;,,/*,*/),,//,emit  an  event 用all  connected  sockets ,, on(& # 39;回复# 39;,,函数(){,/* */,});,//,listen 用,event }); 

关于插座。io还有一点需要注意:Socke。io并不完全是WebSocket的实现。

注意:,Socket.IO  is  not  a  WebSocket 实现只Although  Socket.IO  indeed  uses  WebSocket  as  a  transport  when ,, it  adds  some  metadata 用each 包:,,packet 类型,从而namespace 以及,ack  id  when  a  message  acknowledgement  is 需要。

接下来我们需要用快递。js来建立一个服务器端程序,并在其中引入socket . io。

<强>节点。js服务器的搭建

<>强利用表达。js搭建基础服务器

我们使用了表达。js来搭建节点。js消息推送服务器,先利用一个简要的例子来浏览其功能:

//, server.js  const  express =,要求(& # 39;表达# 39;);,const  app =,表达();,const  path =,要求(& # 39;path & # 39;);, const  http =,要求(& # 39;http # 39;) .Server (app);,, const  port =, 4001;,, app.use (express.static (path.join (__dirname, & # 39;公共# 39;)));,,app.get(& # 39;/& # 39;,,函数(点播,res), {,,,, res.sendFile(时间+ __dirname  & # 39;/公共/index . html # 39;);,});,, app.get (& # 39;/api # 39;,,函数(点播,res), {,,,, res.send(& # 39; # 39;公司),,});,,http.listen(港口,函数(),{,,,,console.log (“listening 提醒端口:${港口}');,});

将上面的代码保存为服务器。js,新建一个公共文件夹,在其中放入指数。html文件。运行以下命令:

 node 服务器。js 

现在即可在localhost: 4001查看效果了。

<强>引入插座。io

现在已经有了一个基础的快递服务器,接下来需要将插座。io加入其中。

 const  io =,要求(& # 39;socket . io # 39;) (http);,, io.on(& # 39;连接# 39;,,函数(插座),{,,,,console.log (& # 39; a  user 连接# 39;),,,,,,socket.broadcast.emit (& # 39; new_user& # 39;,, {});,} 

这里的io监听连接事件,当客户端与服务器建立了连接之后,这里的回调函数会被调用(客户,中的代码将在下一节介绍)。

函数的参数套接字代表的是当前的客户端和服务器间建立的这个连接。可在客户端程序中将这个建立的套接字,连接打印出来,如下图所示:

如何使用插座。io实现消息实时推送功能

其中的id属性可以用于标识出这一连接,从而服务器可以向特定的用户发送消息。

 socket.broadcast.emit (& # 39; new_user& # 39;,, {}); 

这一行代码表示套接字将向当前所有与服务器建立了连接的客户(不包括自己)广播一条名为new_user的消息。

<强>后端推送消息的处理流程

<李>

在节点服务器建立一个用户信息和套接字id的映射表,因为同一用户可能打开了多个页面,所以他的套接字标识,可能存在多个值。当用户建立连接时,往其中添加值;用户断开连接后,删除相应值。

<李>

当Java后台存在需要推送的消息时,会向节点服务器的api/路径后一条消息,其中包括用于标识用户的tokenId,和其它数据。

<李>

节点服务器接收到后请求后,对请求内容进行处理,根据tokenId找出与该用户对应的套接字id、插座。io会根据,id来向用户推送消息。

<强>对用户信息的处理

方便起见,这里只用一个数组保存用户信息,实际工作中可以根据需要放入数据库中保存。

 global.users =,[];,//,记录下登录用户的tokenId,, socketId 

如何使用socket . io实现消息实时推送功能