IM最基本的功能就是即时消息交换,那么一个送出的消息将经历哪些过程才能最终送达目的地?
下面给出一个过程描述:
1. 消息从客户端发出经过网络由客户端所直接连接的服务器接收
2. 接入服务器接收到网络字节流后重组消息包(协议解包的过程)
3. 合法性判断
- -只有已登陆的用户才能发送消息
- - 消息包的长度限制
4. 协议分析(得到消息的类型、格式、目的地等)然后交给合适的程序模块进行处理
5. 目的地定位(判定目标用户的接入服务器)
- - 无法定位(不在线)
- - 定位到唯一位置(单一登陆)
- - 定位到多个位置(多点登陆)
6. 消息路由
- - 无法定位时:根据消息类型判定丢弃或离线存储
- - 定位唯一时:直接进行消息投递
- - 定位不唯一时:按路由策略进行投递,其中策略可能有全部发送给多个位置、按定位优先级选择最高级发送、按最后活跃或登陆位置投递等。
以上过程在不同规模的IM服务实现中差异却很大。
例如,在几十万用户规模内可能全部流程都在一个程序中完成,部署单台服务器即可支撑,定位非常简单因为不跨越服务器,用户的在线、离线等各种状态也可以直接保存在服务器内存中非常高效,但一旦超出了单一服务器的支撑规模,引入集群化则带了很多复杂性。
集群化后最大的不同在于用户信息(状态、接入位置)的外移,原本存储于服务器内存中的信息将转移到公共分布式集群缓存中,对内存和分布式缓存的访问开销本身的差距就在不同的数量级上,而且分布式缓存还可能存在用户信息更新的延迟、脏数据等问题,因此消息交换的处理机制必须结合这些集群特征进行考虑。
以下是实现时的几个注意点:
1.连接到同一接入服务器上、连接到同一集群的不同服务器上和连接到不同集群服务器上的用户之间的消息交换流程实现是不同的。
2. 用户登陆信息(状态、接入位置)外移分布式缓存后,如果在多个集群间(不同集群可能处在不同IDC机房中)存在同步状态信息,则不可依赖状态信息对用户的可送达性进行预先判断,因为状态可能存在明显的滞后,这类情况主要是针对跨集群消息交换实现时。
3. 分布式缓存中可能保存了大量用户的实时信息,但可能存在用户下线时不能及时清除这些与本次登陆有关的缓存数据(例如:接入服务器故障导致的清理工作失败),缓存存在垃圾数据膨胀的可能,需设计有效的后台清理机制来维持缓存的可用性。
分享到:
相关推荐
IM客户端 简单的点对点聊天设置,供本地使用。
点对点聊天IM应用,前后端分离项目!前端:react;后端:NestJS;群聊后续会加,但是短期内不会,有空的话会把精力放在代码优化上!因为我实在是不想写UI了,懒的连手机端都没适配:grinning_face_with_smiling_eyes:...
移动IM之争:用户关系管理的零和博弈.docx
一个普通用户的IM体验报告:好用安全是王道.docx
如果您发现我们的代码或项目对您的研究有用,请引用: @inproceedings{gao2018im2flow, title={Im2Flow: Motion Hallucination from Static Images for Action Recognition}, author={Gao, Ruohan and
软件说明:该软件为点对点传送的聊天软件,实现聊天软件的基本功能,可用于局域网聊天以及传送文件 软件特点: 1)用于局域网聊天以及文件传送 2)聊天记录采用了类QQ模式 3)传送文件可显示文件信息 4)传送文件可...
支持点对点消息,群集消息,聊天室消息 支持展开部署 单机支持50w用户在线 单机处理消息5000条/ s 支持超大分组(3000人) 服务器硬件指标:32g 16核 编译运行 安装go编译环境 版本要求:支持模块,高于v1.11参考...
名字的「Ambassador」意为「使者」,「IM」意为「即时聊天」,也可理解为「我是」,寓意这个 bot 在多个即时聊天平台承担使者的角色,按某一既定规则转发、回复消息。 转发规则可通过配置文件设置,自定义性比较强。...
使用趋动云平台复现论文源码IM-IAD: Industrial Image Anomaly Detection Benchmark in Manufacturing主要针对工业领域CV方向异常检测现阶段最先进的方法,构建一套统一开源框架便于后续研究者开发与使用,本文主要...
im-select:通过端子:pager:切换输入法
Aurora IMUI 是个通用的即时通讯(IM)UI 库,不特定于任何 IM SDK。本 UI 库提供了消息列表、输入视图等常用组件,支持常见的消息类型:文字、图片、语音、视频等。默认包含多套界面风格,也能根据自己的需要自定义...
02-设计一个亿级消息量的 IM 系统.pdf
一个简单的即时通信软件源码,包括添加删除好友、用户上下线提示、离线消息记录等功能。socket编程
《如何支持过千万级高并发消息量——网易IM云服务架构设计与实践》-周梁伟
了有效保护用户的敏感信息,需要对IM进行安全性设计。 目前,针对主流IM安全问题的解决方案主要是通过SSL 方式实现客户端到服务器的认证和加密通信[ 2 ] ,尚未有效地 解决客户端之间的身份认证、消息加密与消息认证...
compile 'im.dacer:AndroidCharts:1.0.3' Usage Line Chart LineView lineView = (LineView)findViewById(R.id.line_view); lineView.setDrawDotLine(false); //optional lineView.setShowPopup(LineView.SHOW_...
Netty 入门与实战:仿写微信 IM 即时通讯系统,掘金小册子,netty教程。章节齐全无缺失,排版非常不错。 1.仿微信IM系统简介 1 2.Netty是什么? 2 3.服务端启动流程 8 4.客户端启动流程 11 5.实战:客户端与服务端双向...
一个简单的IM一个简单的IM一个简单的IM
简单的点对点即时通讯程序是一个轻量级的IM项目。 绝不准备在黄金时段或在日常情况下至少使用。 它更多是技术演示,而不是程序的任何内容。
IM即时通讯SERVER 连接以及模块设计文档