uniapp小程序webSocket封装、断线重连、心跳检测

uniapp小程序webSocket封装、断线重连、心跳检测,第1张

最近在做 IOT 的项目,里面有个小程序要用到 webSocket ,借这个机会,封装了一个 uniapp小程序 适用的 Socket 类,包括断线重连,心跳检测等等,具体实现如下。

直接实例化封装的 socket 类,调用 initSocket 初始化就行了,当收到消息的时候,会触发全局 $emit 事件,只需要使用 $on 监听 message 事件就行。

我这边在 globalData 里面定义了 socketObj 全局变量,在首页 onShow 生命周期里面判断当前是否已经初始化了 socket 实例,再进行 *** 作。

homevue

断线会自动重连。

如果看了觉得有帮助的,我是@ 鹏多多11997110103 ,欢迎 点赞 关注 评论;

END

往期文章

个人主页

#include <stdioh>

#include <stdlibh>

#include <timeh>

#define N 10

void sort(int arr[], int n);

int main()

{

int arr[N];

int i;

srand((unsigned int)time(NULL)); // 设置随机数种子

// 随机生成10个1到100的正整数

for (i = 0; i < N; i++) {

arr[i] = rand() % 100 + 1;

}

printf("排序前:");

for (i = 0; i < N; i++) {

printf("%d ", arr[i]);

}

printf("\n");

sort(arr, N); // 排序

printf("排序后:");

for (i = 0; i < N; i++) {

printf("%d ", arr[i]);

}

printf("\n");

return 0;

}

void sort(int arr[], int n)

{

int i, j, temp;

for (i = 0; i < n - 1; i++) {

for (j = 0; j < n - 1 - i; j++) {

if (arr[j] < arr[j+1]) { // 如果前一个元素比后一个元素小,交换位置

temp = arr[j];

arr[j] = arr[j+1];

arr[j+1] = temp;

}

}

}

}

首先断线有很多可能,服务器端代码错误或者网络路由问题,等等,解决这些断线问题的方法就是心跳检测,看应用需要采用几秒客户端(C)向服务器端发送ping协议(协议名称可以自己定)。然后服务器(S)要有个储存器(可以是哈希表或者是类数组)保存客户端连接句柄以及一些必要属性,还要有个时间,用来对比C每次ping的时间是否超过设定超时时间。如果超时就将C的Sock 句柄清除。到这S端就可以了。C端还要有个断线处理,监视检测自己是否断线,做个重连机制,这样一个完整的通讯就差不多了,至于其他应用就要看自己的需要通过协议来 *** 作了。 希望这些能帮到你

首先,心跳包一般是30秒或者1分钟一次才正常,3秒一次太频繁,耗损资源,降低效率,心跳包其实就是你自己定义一条数据send给服务器,服务器recv到这条数据做下判断就行了,如果1分钟没收到这条数据,就断开此客户端的socket连接,返回socket值,根据返回的值确定此客户端掉线了

MQTT是基于TCP的,因此需要考虑连接心跳,paho mqtt c的心跳处理函数

概括如下:

ping_outstanding 在下述函数中处理,该函数的调用是在接收线程中,如果收到云端的 PINGRESP 数据包,会调用该接口

lastSent 是MQTT消息包发送完成,调用的场景如下2个:

MQTTPacket_Factory()

如果收到一个MQTT packet,则设置 lastReceived

心跳是用于判断是否掉线的 只要连着的时候就会持续每隔一小会发一个心跳包,服务器如果多久没收到就判断你已经掉线了 之所以需要心跳包而不直接判断socket的联通状态,是因为在网络上有大量的连接缓存设备(比如电信局的交换机,比如一些硬件防火墙),这些设备会保存连接一段时间(几秒到十几分钟都有)举个例子 A客户端连接着B服务器 实际上是 A->中间的网络设备C->B如果A掉线了,实际上可能是A到C断了,也可能是C到B断了, 如果是A到C断了, 实际上B是无法知道的,因为对B来说A的连接(就是C)还连着 心跳机制就解决了这个问题

以上就是关于uniapp小程序webSocket封装、断线重连、心跳检测全部的内容,包括:uniapp小程序webSocket封装、断线重连、心跳检测、c语言程序设计这道题,求求、C# socket 通信系统,socket断线重连问题等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10217695.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存