大家好,我是考100分的小小码 ,祝大家学习进步,加薪顺利呀。今天说一说即时通讯琐碎知识点,希望您对编程的造诣更进一步.
前言
基本即时通讯功能(语音聊天,视频通话)已经实现了,但是一些细节的地方还是需要处理,这篇文章就罗列一些细节点,待我一步步去完善。
知识点
如何保证服务器与客户端一直保持有效连接
- 客户端由于没有网络,失去了长连接,服务器如何知道这种情况而断开连接?如何知道一个客户端一直处于正常的连接状态。
- 上边的问题我们需要通过心跳包的机制来保持有效连接。
- 我们可以通过每间隔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