即时通讯琐碎知识点

即时通讯琐碎知识点但是一些细节的地方还是需要处理,这篇文章就罗列一些细节点,待我一步步去完善。如何知道一个客户端一直处于正常的连接状态。

前言

基本即时通讯功能(语音聊天,视频通话)已经实现了,但是一些细节的地方还是需要处理,这篇文章就罗列一些细节点,待我一步步去完善。

知识点

如何保证服务器与客户端一直保持有效连接

  • 客户端由于没有网络,失去了长连接,服务器如何知道这种情况而断开连接?如何知道一个客户端一直处于正常的连接状态。
  • 上边的问题我们需要通过心跳包的机制来保持有效连接。
  • 我们可以通过每间隔1分钟或者多久,给服务器发送一个简短的消息(越简洁越好,省流量),服务器收到消息后知道客户端处于正常连接状态,然后我们给客户端3次重连的机会,如果3分钟后(再次基础上富余5秒)客户端还没有心跳包给服务器,服务器则判断客户端由于一些原因失去了连接,可以直接断开连接。

客户端重连

  • 当网络环境切换造成的掉线,需要重新建立连接;
  • 由于服务器原因而一直连接不上,需要按照科学的间隔时间建立重连,就是不要一直每间隔1分钟重连一次,正常来说随着重连次数的增多,间隔应该越来越长;

保持服务不死

  • 为了保持与服务器的连接线程不死,最好创建Service服务,参考;
  • 为了保持Service不死,参考

给离线用户发消息

  • 判断用户是否在线,不在线的话先将消息存储到数据库。当用户上线时,先去数据库查询看是否有自己的消息。
  • 上边的方法存在一点问题,就是当用户退出,服务器状态还没有改变的时候,给用户发消息,数据是会丢失的,改进方法就是无论用户是否在线都先将消息存储到数据库,当用户收到消息后,给服务器一个收到消息的回执,服务器收到回执后可以把数据库的消息删除。

应该选用何种技术

  • 笔者使用的是socket.io+webrtc。用socket.io实现长连接,webrtc在此基础上实现语音视频通话。
  • 网上有用socket+mina+xmpp+androidpn来实现即时通讯,由于xmpp采用xml协议,占用流量比较大,不建议在移动端使用。
  • 基于MQTT协议开发的也很火爆,有兴趣的可以研究一下。参考
  • 很有参考价值的一篇文章可以看一看,参考。
即时通讯琐碎知识点

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/11952.html

(0)

相关推荐

  • 一文读懂:开源大数据调度系统Taier1.2版本新增的「工作流」到底是什么?[通俗易懂]

    一文读懂:开源大数据调度系统Taier1.2版本新增的「工作流」到底是什么?[通俗易懂]一、什么是工作流? 在阐述什么是工作流之前,先说一下工作流和普通任务的区别,在于依赖视图。 普通任务本身他只会有自己的dag图,依赖视图是无边界的,不可控的,而工作流则是把整个工作流都展示出来,是有边

    2023-06-11
    144
  • MySQL基础 -JDBC[通俗易懂]

    MySQL基础 -JDBC[通俗易懂]一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第14天,点击查看活动详情。 JDBC 数据库驱动 驱动:声卡,显卡,数据库 我们的程序会通过 数据库驱动,和数据库打交道 JDBC

    2023-08-11
    135
  • Python正则表达式:强大的文本匹配工具

    Python正则表达式:强大的文本匹配工具正则表达式是一种处理字符串的方法。在文本处理中,经常需要对字符串进行操作,例如字符串的匹配、替换以及删除等操作。Python中的正则表达式库re提供了一套强大的工具,能够对文本进行全面的匹配和操作。

    2024-02-23
    119
  • 使用Python tkinter实现输入框

    使用Python tkinter实现输入框Tkinter是Python自带的GUI库,它是Tk GUI工具箱的Python接口,是Python编程语言的标准GUI库之一,具有跨平台性。Tkinter库用于Python图形用户界面编程,支持Windows、Linux、Mac OS X等操作系统。

    2024-03-02
    90
  • B树、B+树发展史 、区别[通俗易懂]

    B树、B+树发展史 、区别[通俗易懂]顺序查找:就是从第一个元素开始,按索引顺序遍历待查找序列,直到找出给定目标或者查找失败 缺点:效率低 – 需要遍历整个待查序列 二分法查找:也称为折半法,是一种在有序数组中查找特定元素的搜

    2023-03-09
    159
  • 时间列使用timestamp,更新任何列,时间列都会更新

    时间列使用timestamp,更新任何列,时间列都会更新  今天发生了一种奇怪的现象:时间列使用timestamp,更新任何列,时间列都会更新。   发生这种现象的原因是打开了根据当前时间戳更新的开关。

    2022-12-24
    144
  • MySQL8安装教程「建议收藏」

    MySQL8安装教程「建议收藏」1、下载MySQL安装包 安装包解压之后如下: 2、初始化MySQL (1). 建立初始化的ini配置文件(my.ini) 在解压之后的文件夹中并没有my.ini文件,需要自己创建,文件内容如下: …

    2022-12-19
    151
  • windows10配置mysql环境变量_linux环境变量设置

    windows10配置mysql环境变量_linux环境变量设置在桌面选择“计算机”的图标(或者是我的电脑),右键–>属性–>点击“高级系统设置” 然后选择 高级 选项点击环境变量 然后点击新建-> 变量名为MYSQL_HOME 变量值为my

    2022-12-29
    146

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注