前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >即时通讯(im)框架/系统开发思考(1)-通讯协议选型

即时通讯(im)框架/系统开发思考(1)-通讯协议选型

原创
作者头像
E聊SDK
修改2020-06-15 10:53:39
2.8K0
修改2020-06-15 10:53:39
举报
文章被收录于专栏:用户4215420的专栏

1.前言:

近来笔者接到公司的一个IM开发需要,要在原来的Web业务系统、移动端系统上加入一个即时聊天的功能,具有就是能聊天就行。相信各位也会接到需要开发IM的系统的任务,那么,开发一个im系统应选用哪种通讯协议?

2.思考-即时聊天选用的通讯协议选哪种:

XMPP(可扩展消息与存在协议): 是一个成熟开源的即时聊天协议, 基于XMPP的开源技术有openfire(后台端), spark(客户端)

优势: 比较成熟的聊天协议,已在XMPP协议内支持单聊, 群聊, 加好友等功能.满足基本的需要.

缺点: 基于xml 实现的通讯协议, 消息载体比较重, 增加网络流量, 定制困难,需要了解openfire原理, 改造有一定的难度。

跨平台: 一般, 仅基于java平台, 如要实现web 等需要自己使用socket进行xml封装.

MQTT(消息队列遥测传输): 严格来说, MQTT是使用与物联网领域的消息传输协议,但有一些即时通讯系统也使用这个协议进行拓展开发,故拎出来说说。MQTT主要有三个特点: 1. 基于发布订阅模式; 2. 为网络不可靠的环境下提供一套消息重传协议.3. 基于TCP/IP, 消息载体轻, 耗电量小.

优势: 已实现消息丢失重传功能, 消息载体轻, 耗电量小.

缺点: 不是专用于聊天的协议, 登录, 单聊, 群聊, 加好友等功能都需要自己实现. 开发成本高,如要支持多个平台, 每个客户端都需要定制,IM方面的开源社区不活跃,技术文档少。

跨平台: 差, 每个客户端都需要实现MQTT的聊天协议。

自定义协议: 可以基于WebSocket, socket.io, 甚至常用的消息队列: RabbitMQ, RocketMQ 等长连接框架上加入聊天的业务, 比如登录, 单聊, 群聊, 加好友等功能。

优势: 基于自己熟悉的技术栈,易上手。

缺点: 单聊, 群聊, 加好友等功能都需要自己实现。

跨平台: 一般, 若选用广泛使用于客户端的WebSocket, socket.io,能很好的实现跨平台性。

考虑到日后的跨平台定制开发,最终敲定选用socket.io + 自定义协议实现。为什么要选用socket.io?不用WebSocket?

  1. socket.io设计的目标是支持任何的浏览器,任何设备。在接口方面,socket.io统一了通信的API,在内部实现上支持WebSocket,AJAX long-polling, AJAX multipart streaming, Forever Iframe等方式。也就是说,Socket.io会根据环境来选择适合的通信方式。
  2. socket.io 支持namespace, room 等概念,可以很方便的对socket 进行分组。
  3. socket.io 具有自动重连的功能,适用于恶劣的网络环境。

而e聊sdk正是基于socket.io上开发的免费开源即时通讯框架,e聊sdk 已实现了多平台的socket.io 支持(如:Web, ReactNative, 微信小程序等), 阅读e聊客户端核心sdk 的源码中, 可见到在socket.ts 文件中已实现了多平台的socket.io 支持:

代码语言:txt
复制
        /*IFTRUE_WEBAPP*/
        const webio = require('socket.io-client');
        this。socket = webio。connect(url+"");
        /*FITRUE_WEBAPP*/

        /*IFTRUE_RNAPP*/
        const rnio = require('socket.io-client');
        this。socket = rnio。connect(url+"", {transports: ['websocket']});
        /*FITRUE_RNAPP*/

        /*IFTRUE_WXAPP*/
        const wxio = require('weapp.socket.io');
        this。socket = wxio。connect(url+"");
        /*FITRUE_WXAPP*/

正是由于e聊sdk在设计之初已具有良好的跨平台支持, 选择使用e聊开发即时通讯,可以在跨平台上实现事半功倍的效果。

参考:

e聊客户端核心sdk源码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.前言:
  • 2.思考-即时聊天选用的通讯协议选哪种:
相关产品与服务
即时通信 IM
即时通信 IM(Instant Messaging)基于腾讯二十余年的 IM 技术积累,支持 Android、iOS、Mac、Windows、Web、H5、小程序平台且跨终端互通,低代码 UI 组件助您30分钟集成单聊、群聊、好友与资料、消息漫游、群组管理、会话管理、直播弹幕、内容审核和推送等能力。适用于直播互动、电商带货、客服咨询、社交沟通、企业办公、互动游戏、医疗健康等场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档