IM
文章平均质量分 84
vector6_
linux c++/java
展开
-
定时器的设计与实现
定时器的设计与实现定时器概述定时器是服务器端和客户端都常用且重要的组件,主要的作用有延迟处理,定时任务,连接检测等相关使用超时机制的功能。对于服务端来说,驱动服务端逻辑的事件主要有两个,⼀个是网络事件,另⼀个是时间事件;在不同框架中,这两种事件有不同的实现方式;1.网络事件和时间事件在⼀个线程当中配合使⽤;例如nginx、redis;2.网络事件和时间事件在不同线程当中处理;例如skynet;定时器功能分析对于定时器,重要的接口方法有以下几个:// 初始化定时器void in原创 2021-05-31 00:44:15 · 465 阅读 · 1 评论 -
图片、音视频浏览播放优化
图片、音视频浏览播放优化之前的文章对即时消息场景中多媒体消息的上传优化进行了分析,本文是多媒体消息流优化的下篇:图片音视频下载、播放的优化。CDN加速我们都知道,浏览图片和播放视频的速度与用户跟资源的距离有关,例如下载时提供了多个下载点,北京的用户可以从北京的机房下载图片,而广东的用户可以从广东的节点机房来下载图片,这样让用户和资源实现物理位置上的相邻,以此降低远程访问的耗时,提升下载性能。这就是一种常用的优化手段,通过 CDN(Content Delivery Network,内容分发网络)对图片原创 2021-05-25 01:24:06 · 260 阅读 · 1 评论 -
图片、音视频消息上传优化
图片、音视频消息上传优化通常图片、音视频等多媒体消息相对于文本消息会大很多,因此,多媒体消息在网络传输、实时触达等方面相需要有更多的优化。本文就针对如何使图片、视频、语音等多媒体消息发送得又快又稳进行相关分析。多上传接入点国内目前的固网宽带运营商构成复杂,且用户宽带向来呈现出“南电信北联通”的分布现状。而在移动网络下,移动、电信、联通三足鼎立,再加上还有教育网和海外两大网络体系,整体网络结构更加复杂,跨运营商网络访问的高延迟和不稳定性一直是个无法解决的老大难问题。对于传输数据更多的视频、图片等多媒体原创 2021-05-24 01:22:17 · 559 阅读 · 1 评论 -
消息未读数、分布式锁和原子性
消息未读数、分布式锁和原子性“消息未读数”在社交软件中的重要性消息未读数对用户使用体验影响很大,这是因为“未读数”是一种强提醒方式,它通过 App 角标,或者 App 内部 Tab 的数字标签,来告诉用户收到了新的消息。对于在多个社交 App 来回切换的重度用户来说,基本上都是靠“未读数”来获取新消息事件,如果“未读数”不准确,会对用户造成不必要的困扰。消息和未读不一致的原因社交软件中主要涉及两个未读数的概念:“总未读”与“会话未读”会话未读:当前用户和某一个聊天方的未读消息数。比如用户原创 2021-05-23 00:28:41 · 184 阅读 · 0 评论 -
保证消息不会乱序——消息序号生成器
保证消息不会乱序——消息序号生成器为什么消息的时序一致性很重要?对于聊天、直播互动等业务来说,消息的时序代表的是发送方的意见表述和接收方的语义逻辑理解,如果时序一致性不能保证,可能就会造成聊天语义不连贯、容易出现曲解和误会。可以想象一下,一个人说话颠三倒四,前言不搭后语的样子,就理解我们为什么要尤其注重消息的时序一致性了。对于点对点的聊天场景,时序一致性需要保证接收方的接收顺序和发送方的发出顺序一致;而对于群组聊天,时序一致性保证的是群里所有接收人看到的消息展现顺序都一样。保证消息的时序一致性很困原创 2021-05-22 22:28:05 · 1823 阅读 · 3 评论 -
保证消息的可靠投递——即时消息 ACK机制
即时消息 ACK机制:如何保证消息的可靠投递?什么是消息的可靠投递?站在使用者的角度来看,消息的可靠投递主要是指:消息在发送接收过程中,能够做到不丢消息、消息不重复两点。那么在一般的 IM 系统的设计中,究竟是如何解决这两大难题的呢?本文将对“不丢消息”“消息不重复”进行分析,在技术上到底是怎么实现的。消息丢失有哪几种情况?我们以最常见的“服务端路由中转”类型的 IM 系统为例(非 P2P),即一条消息从用户 A 发出后,需要先经过 IM 服务器来进行中转,然后再由 IM 服务器推送给用户 B,这原创 2021-05-22 18:46:05 · 1421 阅读 · 0 评论 -
利用openSSL库AES模块加密
利用openSSL库AES模块加密1.对称加密/解密对称加密比较常见的有DES/AES。加密方和解密方都持有相同的密钥。对称的意思就是加密和解密都是用相同的密钥。2.非对称加密/解密常见的加密算法DSA/RSA。如果做过Google Pay的话,应该不会陌生。非对称意味着加密和解密使用的密钥不是相同的。这种应用的场合是需要保持发起方的权威性,比如Google中一次支付行为,只能Google通过私钥来加密产出来,但是大家都能通过公钥来认证这个是真的。打个更加浅显的比方:私钥可以理解成美联储的印钞机,公原创 2021-05-22 18:10:41 · 191 阅读 · 0 评论 -
IM开发——图片文件服务器
IM开发——图片文件服务器一个完善的IM系统中通常充斥着大量的图片内容,包括:用户头像、图片消息、相册、图片表情等等,那么在做服务端架构设计时该如何存储这些图片呢?旧式的PC端IM中,诸如图片消息这种业务形态,可能是通过长连接直接推送过去(所谓的实时图片传输),这种情况理论上是不需要服务端存储的。现今的主流移动端IM,基于移动网络抖动大、 不稳定的特性和随时随地社交分享的现实,已很少使用实时传输这种技术手段。现在主流IM都是本文所述的这种:通过Http短连接从云(即服务端)“拉取”,这种方式的原创 2021-04-21 00:10:59 · 463 阅读 · 0 评论 -
IM开发——HTTP短连接中的Cookie、Session和Token
IM开发——HTTP短连接中的Cookie、Session和Token众所周之,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现。Http短连接主要用于从服务器读取各种持久化信息:比如用户信息、聊天历史记录、好友列表等等,长连接则是用于实时的聊天消息或指令的接收和发送。CookieCookie 技术产生源于 HTTP 协议在互联网上的急速发展。随着互联网时代的策马奔腾,带宽等限制不存在了,人们需要更复杂的互联网交互活动,就必须同服务器保持活动状态。于是在原创 2021-04-21 00:08:07 · 502 阅读 · 4 评论 -
IM通信协议设计
IM通信协议设计IM通信协议的制定是IM开发中起点,也是贯穿设计、开发、运维始终的核心所在,通信协议设计的好坏,直接影响后绪环节的用户体验(数据流量、耗电量、通信速度)、兼容性(新老版本的无缝融合)、扩展性(后绪的版本升级怎么办)等,是个基础且极其重要的工作。IM通信协议的分层设计通常, 协议有语法、语义、时序三要素:(1)语法:即数据与控制信息的结构或格式(2)语义:即需要发出何种控制信息,完成何种动作以及做出何种响应(3)时序:即事件实现顺序的详细说明一套典型的IM通信协议设计分为三层原创 2021-04-21 00:06:13 · 412 阅读 · 0 评论 -
如何选择即时通讯应用的数据传输格式
如何选择即时通讯应用的数据传输格式即时通讯应用(包括IM聊天应用、实时消息推送应用等)开发的前期技术选型时,关于数据传输格式的选择,在即时通讯开发者同行的眼里,是个极富争议话题。主要的原因在于:可选择的协议或封装格式多种多样:可选择的余地很大:XMPP、Protobuf、JSON、私有2进制、MQTT、定格化XML、Plain text等等;同一种格式并不能适用于大多数的场景:不同的场景有同的考虑而协议的选择往 跟这是挂钩在一起的,比如:移动端IM或推送技术用XMPP这样的协议时,多数情况下都原创 2021-04-21 00:05:19 · 358 阅读 · 0 评论 -
IM开发需要面对的技术问题
IM开发需要面对的技术问题网络通讯技术选择IM主流网络通讯技术有两种:基于TCP的长连接;基于HTTP短连接PULL的方式。后者常见于WEB IM系统(当然现在很多WEB IM都是基于WebSocket实现),它的优点是实现简单,方便开发上手,问题是流量大,服务器负载较大,消息及时性无法很好地保证,对大规模的用户量支持不够,比较适合小型的IM系统,如小网站的客户系统。基于TCP长连接则能够更好地支持大批量用户,问题是客户端和服务器的实现比较复杂。当然也还有一些变种,如下行使用MQTT进行服务原创 2021-04-21 00:04:03 · 371 阅读 · 0 评论