Jack Jiang

我的最新工程MobileIMSDK:http://git.oschina.net/jackjiang/MobileIMSDK
posts - 511, comments - 13, trackbacks - 0, articles - 1

2025年7月16日

1、引言

网络ping不通是网络中出现频率最高的故障之一,同时也是最让人抓狂的故障,谁没遇到过?今天就和你细说下ping不通的原因,看看能不能和你遇到的情况对上号。

技术交流:

cover-opti

- 移动端IM开发入门文章:《新手入门一篇就够:从零开发移动端IM

本文已同步发布于:http://www.52im.net/thread-4857-1-1.html

2、系列文章

本文是系列文章中的第 20篇,本系列文章的大纲如下:

3、ping命令技术原理

了解ping命令原因,我们来通过一个实例来了解。

假定主机A的IP地址是 192.168.1.1 ,主机B的IP地址是 192.168.1.2 ,都在同一子网内,则当你在主机A上运行“Ping 192.168.1.2”后,都发生了些什么呢?

首先:Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“192.168.1.2”一起交给IP层协议(和ICMP一样,实际上是一组后台运行的进程)。

IP层协议将以地址“192.168.1.2”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包。并在一个映射表中查找出IP地址192.168.1.2所对应的物理地址(也叫MAC地址,这是数据链路层协议构建数据链路层的传输单元帧所必需的),一并交给数据链路层。

后者构建一个数据帧,目的地址是IP层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。

1

主机B收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合则接收,否则丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层协议。

同样:IP层检查后,将有用的信息提取后交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B一模一样。

直接说:就是利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,再要求对方返回一个同样大小的数据包来确定两台网络机器是否连接相通,时延是多少。

上面的过程就是ping命令的原理:主机A收到了主机B的一个应答包,说明两台主机之间的去、回通路均正常,但也并不是所有网络都是正常的,下面我们来看ping不通的原因。

4、同网段ping不通的原因概述

ping命令不通,主要有两种情况:

  • 1)同网段内的ip地址ping不通;
  • 2)不同网段的ip地址ping不通。

各个情况不一样,我们首先来看同网段ping不通的两种情况。

5、同网段ping不通的情况1:“无法访问目标主机”

目的ip和源ip是同一网段的,ping的结果是“无法访问目标主机”,属于ping的请求没有发出。

我们来看下,ping同网段不存的ip地址:

2

ping的请求发出后,返回显示“无法访问目标主机"。

什么原因呢?说明此时ping的需求并没有成功发出。

这时要检查:

  • 1)对方是否开机?ip是否存在?
  • 2)有跨交换机vlan的话,检查对应的中间trunk链路是否导通?
  • 3)走直连路由是否正确?是否应该走默认路由,而走了直连路由;
  • 4)子网掩码是否错误;
  • 5)默认网关是否填写正确。

6、同网段ping不通的情况2:“超时(time out)”

目的ip和源ip是同一网段的,ping的结果是“超时或者time out” ,属于ping的请求已经成功发出了,但目标主机没有回复。

ping的请求发出后,返回显示“超时":

3

什么原因呢?这种情况是ping已经成功发出了,到达了主机,但是没有得到响应

要检查:

  • 1)检查下防火墙,防火墙禁止了对ping的回应;
  • 2)子网掩码的设置错误,导致不在同一个网段;
  • 3)设备硬件故障,导致设备没有对应的mac地址,无法生成路由表,而走默认路由;
  • 4)ip冲突,或ip地址与直联路由不在同一个网段;
  • 5)网关没有设置好。

7、 跨网段ping不通的原因概述

不同网段ping不通,通常的表现有“无法访问目标主机”、“time out”,但具体分析起来其实可能的原因是比较多的,我们还是一起来看下跨网段常见的原因吧。

8、 跨网段ping不通的情况1:“无法访问目标主机”

跨网段出现无法访问目标主机,说明请求没有成功发出,获取不了目的ip地址与mac地址。

4

可能出现的原因是:

  • 1)目的ip地址不存在;
  • 2)检查路由表是否有缺省的路由;
  • 3)检查arp表是否有网关的mac地址;
  • 4)有网关设置错误;
  • 5)走了默认路由。

9、 跨网段ping不通的情况2:“time out”

若显示 time out,表示 ping 的 request 消息已经发出,目的ip的网关已经获取到目的ip的mac地址,但是目的主机没有回复,或源主机无法收到。

这些应该检查回程路由和节点回程路由。

5

可能的原因有:

  • 1)检查下防火墙,是否拦截了ping的请求消息;
  • 2)检查经过节点的路由是否正确,或者是否有回程路由;
  • 3)回程路由的硬件网卡出口和ping的request的入口网卡不是同一个;
  • 4)交换机vlan对应的接口全部down了,导致vlan状态down,vlan的对应路由没有生成。

10、本文小结

当我们网络ping不通时,首先要看ping显示的结果是”无法访问目标主机“还是”超时“,再看是同网段,还是不同网段,采取相应的分析方法。

另外在分析与解决网络故障时,我们要熟练的了解ping、arp、tracert、route这几个命令的用法,可以快速的定位ping不通的原因。

尤其是这arp、tracert、route这三个命令的用法,解决故障非常方便。

11、参考资料

[1] 史上最通俗的集线器、交换机、路由器功能原理入门

[2] 通俗讲解,有了IP地址,为何还要用MAC地址?

[3] 外行也能读懂的网络硬件设备功能原理速成

[4] 每天都在用的Ping命令,它到底是什么?

[5] 能Ping通,TCP就一定能连接和通信吗?

[6] 什么是公网IP和内网IP?NAT转换又是什么鬼?

[7] 假如你来设计网络,会怎么做?

[8] 你真的了解127.0.0.1和0.0.0.0的区别?

[9] 一文搞懂localhost和127.0.0.1

[10] 深入操作系统,彻底搞懂127.0.0.1本机网络通信

[11] 冰山之下,一次网络请求背后的技术秘密

[12] 得物自研移动端弱网诊断工具的技术实践分享


(本文已同步发布于:http://www.52im.net/thread-4857-1-1.html)

posted @ 2025-08-28 11:51 Jack Jiang 阅读(19) | 评论 (0)编辑 收藏

1、基本介绍

1

RainbowTalk是一套基于开源即时通讯讯IM框架 MobileIMSDK 的产品级鸿蒙NEXT端IM系统。纯ArkTS编写、全新开发,没有套壳、也没走捷径,每一行代码都够“纯血”。与姊妹产品RainbowChatRainbowChat-Web 技术同源,历经考验。

☞ 详细介绍:http://www.52im.net/thread-4822-1-1.html
☞ 运行截图:http://www.52im.net/thread-4824-1-1.html (运行视频
☞ 下载体验:http://www.52im.net/thread-4825-1-1.html

2、MobileIMSDK开源工程

2

MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持UDP 、TCP 、WebSocket 三种协议,支持iOS、Android、H5、小程序、Uniapp、标准Java平台,服务端基于Netty编写。

工程同步开源地址:

开源仓库目录说明:

 proj_dir

MobileIMSDK框架由以下部分组成:

 3

MobileIMSDK框架的架构原理图:

4

v2.4 版更新内容

此版更新内容更多历史更新日志):

  • 1)[优化] 解决了聊天界面中语音消息下载、图片消息上传时消息气泡ui会闪烁的问题;
  • 2)[优化] 解决深色模式下聊天消息文字看不清的问题;
  • 3)[新增] 新增了大文件消息(支持断点续传、下载、查看文件内容等)。

部分新增功能运行截图(更多截图运行视频):

6

posted @ 2025-08-20 10:14 Jack Jiang 阅读(30) | 评论 (0)编辑 收藏

1、基本介绍

RainbowChat是一套基于MobileIMSDK通信框架的产品级移动端IM系统。RainbowChat源于真实运营的产品,不同于市面上某些开源或淘宝售卖的demo级代码,RainbowChat的产品前身已被成千上万真实的客户使用过,解决了大量的屏幕适配、细节优化、机器兼容问题。

RainbowChat可能是市面上唯一一款同时支持TCP、UDP两种通信协议的全源码IM产品(且核心通信层也是自主开发的)。RainbowChat是RainbowChat-Web 和鸿蒙NEXT产品RainbowTalk 的姊妹产品。

2、品质说明

❶ 源自真正运营的商业产品:RainbowChat的技术源于真实运营的商业产品。

❷ 它不是个Demo:不同于市面上某些开源或淘宝的demo级代码,RainbowChat已被成千上万真实的客户使用过,解决了大量的屏幕适配、细节优化、机器兼容问题。

❸ 简洁、精炼、优化、原生:
RainbowChat为了最小化开发者2次开发时的兼容性、可读性、可维护性难度,把框架的依赖、工具的依赖、各种库版本的依赖、运行环境的依赖都尽最大努力降到最低,极大降低开发者的开发环境和部署环境搭建的成本,达到最简洁、最精炼的目标。

* 截止目前:RainbowChat已全面深度适配最新Android系统,确保更佳的用户体验效果。

3、运行演示与安装体验

❶ 运行截图,详见:《Android端全部功能截图iOS端全部功能截图
❷ 下载体验,详见:《RainbowChat下载体验

4、功能简介

1、支持文本消息、语音留言消息、图片消息、大文件消息(支持断点续传)、短视频消息、个人名片、群名片、位置消息、Emoji表情、消息撤回、消息转发、消息引用、“@”功能、“扫一扫”功能等;
2、支持一对一陌生人聊天模式;
3、支持一对一正式好友聊天模式;
4、支持多对多群聊聊天模式,且自动防刷屏(仅限专业版)
5、完善的群组信息管理:建群、退群、解散、转让、邀请、踢人、群公告等 (仅限专业版)
6、完整的注册、登陆、密码找回等功能闭环;
7、个人中心功能:改基本信息、改个性签名、改头像、改密码等;
8、支持个人相册、个人语音介绍;
9、完整的礼物发送和积分管理子系统;
10、完整的离线消息/指令拉取机制;
11、完整的本地消息/指令缓存机制,节省网络流量;
12、完整的富媒体文件(语音、大文件、图片、短视频)缓存机制,节省网络流量;
13、完整的好友关系管理:查找好友、发出请求、处理请求、删除好友、好友备注等;
14、全功能实时语音聊天(完全自主开发,现在就可体验);
15、全功能实时视频聊天(完全自主开发,现在就可体验);
16、内置一完整“商城”模块,目前仅用于演示产品的完整性;
17、其它未提及的功能和特性请自行下载体验。

RainbowChat线上版本目前仅作演示和研究之用,运行环境配置最小化(仅1核1G和1MB带宽),请客观评估。

5、技术亮点 

1)持续打磨和升级至今(历经时间考验和大量客户面辐射的代码,可靠性、兼容性一定优于短时间内堆砌功能的产品);
2)底层算法库到上层功能,完全自主开发,技术资产可控;
3)同时支持TCP、UDP两种通信协议(可能是市面上能买到的唯一一款);
4)独有的UDP协议支持, 能更好地适应卫星网、移动弱网、嵌入式物联网等场景;
5)即时通讯核心层基于MobileIMSDK 工程,保证了业务代码与通信核心的高度分层(经验不足的IM产品是做不到这一点的);
6)支持完整的消息送达保证(QoS)机制,保证送达率,理论丢包率约为0.0001%;
7)独有的UDP协议无连接特性保证在高延迟、跨洲际、不同网络制式的恶恶劣环境中能稳定、可靠地运行;
8)基于 MobileIMSDK 工程的自有协议,未来的流量压缩对于APP端的节电控制和流量控制、服务端的网络吞吐等都有完全的控制能力;
9)完善的网络状况自动检测、断网重连等服务自动治愈能力;
10)核心算法和实现均为自主原创(历经8年,并非开源拼凑),保证了技术的持续改进、升级、扩展;
11)聊天协议兼容:实现了与RainbowChat-Web产品、鸿蒙NEXT产品RainbowTalk完全兼容的协议模型;
12)消息收发互通:实现了与RainbowChat-Web产品、鸿蒙NEXT产品RainbowTalk的无缝消息互通。

6、注册、登录和“个人中心”等

 

7、好友聊天功能

8、实时语音聊天功能

9、实时视频聊天功能

10、群聊功能

 

11、视频消息功能

12、位置消息功能

13、“大文件”消息(支持断点续传)

 

14、“扫一扫”功能

15、“搜索”功能

16、消息转发功能

17、消息引用功能

18、“@”功能

posted @ 2025-08-19 14:17 Jack Jiang 阅读(26) | 评论 (0)编辑 收藏

     摘要: 本文引用了后台技术汇一枚少年郎“大模型应用之:SSE流式响应”的内容,下文有修订和重新排版。1、引言文章介绍了SSE(Server-Sent Events)技术在大模型流式响应中的应用,包括其发展历程、ChatGPT流式输出原理、SSE技术特点及与WebSocket的对比,并提供了两种流式响应落地方案。* 相关阅读:《全民AI时代,大模型客户端和服务端的实时通信到...  阅读全文

posted @ 2025-08-14 14:31 Jack Jiang 阅读(45) | 评论 (0)编辑 收藏

     摘要: 本文由携程技术Butters分享,原题“干货 | 日均流量200亿,携程高性能全异步网关实践”,下文有修订和重新排版。1、引言本文分享的是携程API网关全异步改造的实践分享,包括从Zuul 1.0同步架构升级为基于Netty的全异步架构,通过RxJava实现业务流程异步化,结合流式转发、ZGC等技术显著提升性能,并构建控制面实现多协议统一治理与模块化编排。 &nb...  阅读全文

posted @ 2025-08-07 12:01 Jack Jiang 阅读(52) | 评论 (0)编辑 收藏

本文由转转平台业务负责人王计宽分享,原题“转转push系统的演进之路”,下文有修订和重新排版。

1、引言

顾名思义,push就是就是借助厂商通道把消息发送给用户的一种方式,一般用于用户的召回和活动触达,和即时通讯IM在业务上稍有区别,但技术逻辑上是相通的,不在此处赘述。

本文将从0开始讲讲转转千万级用户量消息推送系统的架构演进和迭代过程,以及遇到的常见问题的解法,希望能带给你启发。

 
 

2、术语解释

以下是本文涉及到的一些技术术语的解释:

  • 1)业务属性:运营、业务、功能类推送;
  • 2)推送范围: 月活、全量、定向推送、个性化推送;
  • 3)目标端:一般是安卓、ios客户端;
  • 4)通道:小米、华为、魅族、apns等手机厂商的常驻连接;
  • 5)token: 用于设备的唯一标识,由APP本身生成;
  • 6)devicetoken:用于推送的唯一标识,一般由厂商提供;
  • 7)推送量:推送消息的数量;
  • 8)到达率:消息到达手机的数量/推送量;
  • 9)点击率:用户点击量/推送量。

3、当前架构概览

现有的架构支持后台推送、业务推送以及个性化推荐推送。

以下是相关推送业务的特点:

  • 1)后台推送:一般会有标准的格式,特点是时间短、推送量大,比如8点秒杀活动;
  • 2)业务推送 :一般都是业务触发,特点是实时性强、优先级高,如订单支付消息;
  • 3)个性化推送:经常会和用户画像相关,特点是策略复杂、内容多样,需要有风控管理,如猜你喜欢等推荐策略。

4、技术背景——PM想推送运营活动

步骤:

  • 1)PM从大数据平台上导出一部分用户集合;
  • 2)RD写程序调用push接口。

问题:

  • 1)N个PM都有需求,RD..........;
  • 2)8点有一个突发情况,9点来一波;
  • 3)每周末都要活动,推送。

解决方案:

  • 1)搭建一个后台,支持根据用户ID上传,解放开发资源;
  • 2)支持按照时间推送,支持文案可配;
  • 3)支持安卓、IOS分端推送。

遗留的问题:PM上传了一个浏览过手机类目用户的数据集合,数据量太大,上传超时。PS:用户量大概在1000w左右+,大约300M左右的文件。

提示:

  • 1)上传的时间大约在1分钟左右, 需要联系运维设置最长的链接时间,否则nginx会主动断开;
  • 2)上传由同步上传,改成进度条的方式,让上传者可以看到进度;
  • 3)上传和数据处理分开(我们当时是边上传,边解析文件比较慢)。

5、希望重大节日能够即时通知到活跃用户

5.1 实时推

问题描述:重大节日,推送全量用户、月活、周活数据,每次仅是文案不同,PM都需要跑大数据系统,效率太低,当天数据不可获得,平均推送需要1个多小时。

要求:

  • 1)1亿的数据能够在一小时内推送完毕;
  • 2)要覆盖到某一个周期内的用户(比如一个月);
  • 3)支持预览,支持暂停。

分析-数据量(以2000w月活为例):

  • 1) 全量用户认定为近3个月(90天)内访问过转转的用户;
  • 2) 预估所有设备数量在5000w左右;
  • 3) 预计占用的空间为5G。

分析-性能(以2000w月活为例):

  • 1) 老系统push的平均QPS是2000;
  • 2) 2000W/2000/60/2=83~=1小时20分钟,希望能够在12分钟内推送完毕(一个小时推送1亿的指标)。

难点分析:

  • 1) 数据做到准实时,怎么算准实时;
  • 2)2000千万的数据12分钟内推送完毕,QPS~=2.7w, 如何让性能提升13.5倍(2k提升到2.7w的并发)。

解决方案:

  • 1) 数据的准实时:实时接收kafka日志消息,每分钟把清洗的数据进行合并;
  • 2)需要存储的数据要素:用户的token信息(注意不是devicetoken);此token的活跃时间(时间戳);
  • 3)用户数据存储选型。

最终选择redis的zset进行存储。

5.2 如何提高发送性能

首先分析之前之所以慢的原因:

  • 1) 单线程发送;
  • 2) 受到厂商通道的限制,单接口耗时100ms+(IOS通道)。

解决方案:

  • 1)区分安卓、IOS单独发送,原始程序只负责从redis拿到数据后拼装成固定结构(简单拼接操作速度很快);
  • 2)把数据推送到MQ中(可以不用MQ吗?);
  • 3)多个消费订阅者,进行消费(容易扩展),通过厂商 通道推送出去。

注意:iOS通道,我们用的pushy开源工具,特定情况下无法持续推送消息,需要定时检查,重新创建通道。

最后的效果:push推送的QPS达到3w+,推送能力提升的同时,也引发了以下问题。

5.3 业务服务器扛不住瞬时流量

问题描述:当push的推送能力上去了之后, 用户的瞬时访问问题随之而来

  • 1)瞬时的流量高峰,导致超时增多;
  • 2)部分请求到达性能瓶颈,超时增多,页面打不开~,见下图。

push落地效果:

解决办法:

  • 1)最简单的办法:加机器;
  • 2)业务接口多线程、服务治理,消峰(ratelimit);
  • 3)app核心功能增加缓存,保证不会出现白屏的情况;
  • 4)减少活动路径。(一般push都会落地到某一个活动页面。但是正常打开push,都会先进入首页,在跳转到活动页面。给push的消息增加特殊埋点,如果是此类push消息,就直接 跳转到特定页面,减少中间环节。)

6、AB实验室

问题描述:有一天晚上9点推送了一个运营类的push,发现居然点击率超级高,是文案优秀?还是流量高峰?

要求:存在多个推送文案,系统能够择优选择点击率最好的进行推送?

解决方式:加入AB测的能力,先进行少量用户推送,根据AB的效果,择优推送.

7、整合全部手机厂商级ROOM推送通道

新的问题:之前安卓的通道我们仅有小米通道+个推(个推达到率一般,做托底), 如果我们向华为手机推送消息,也是通过小米通道是很难到达的。

要求:

  • 1)希望能够把大厂的厂商通道都接进来;
  • 2)推送的消息能够根据用户最后登录的通道进行优化推送;
  • 3)速度不能慢下来。

解决方式:

  • 1) 搭建tokens服务,能够批量判定devicetoken的最后使用的厂商(需要依赖转转客户端上报);
  • 2) 分库分表的方式进行存储;
  • 3) 数据热备到缓存中。

效果:当年统计能够提高10%的达到率。

8、消息送达监控

一般的监控维度包含:

  • 1)产品线:转转、找靓机等等;
  • 2)客户端:安卓、IOS;
  • 3)指标:发送、到达、点击的数量和比例;
  • 4)数据对比:模板、周期;
  • 5)通道:小米、华为、vivo、apns。

9、 本文小结

现状:

  • 1) 推送月活10分钟;
  • 2) 支持暂停、预览,实时查看推送数据量;
  • 3) 支持提前AB看效果;
  • 4) 支持不在线,微信通知;
  • 5) 支持防打扰;
  • 6) 支持优先级和厂商高优通道。

提高速度:预加载+缓存+多线程+合理的数据结构+批量处理+合理布局+特殊埋点。

折中方案:异步上传、限流控制、降级处理、分层解耦、补偿通知。

10、 参考资料

[1] 极光推送系统大规模高并发架构的技术实践分享

[2] 魅族2500万长连接的实时消息推送架构的技术实践分享

[3] 专访魅族架构师:海量长连接的实时消息推送系统的心得体会

[4] 基于WebSocket实现Hybrid移动应用的消息推送实践(含代码示例)

[5] 一个基于长连接的安全可扩展的订阅/推送服务实现思路

[6] 实践分享:如何构建一套高可用的移动端消息推送系统?

[7] Go语言构建千万级在线的高并发消息推送系统实践(来自360公司)

[8] 腾讯信鸽技术分享:百亿级实时消息推送的实战经验

[9] 京东京麦商家开放平台的消息推送架构演进之路

[10] 技术干货:从零开始,教你设计一个百万级的消息推送系统

[11] 爱奇艺WebSocket实时推送网关技术实践

[12] 喜马拉雅亿级用户量的离线消息推送系统架构设计实践

[13] 消息推送技术干货:美团实时消息推送服务的技术演进之路

[14] 揭秘vivo百亿级厂商消息推送平台的高可用技术实践

[15] 得物从零构建亿级消息推送系统的送达稳定性监控体系技术实践

[16] B站千万级长连接实时消息系统的架构设计与实践

(本文已同步发布于:http://www.52im.net/thread-4852-1-1.html)

posted @ 2025-07-24 15:58 Jack Jiang 阅读(55) | 评论 (0)编辑 收藏

     摘要: 本文由GSYTech 恋猫de小郭分享,原题“2025 跨平台框架更新和发布对比,这是你没看过的全新版本”,下文有修订和重新排版。1、前言2025 年可以说又是一个跨平台的元年,其中不妨有鸿蒙Next平台刺激的原因,也有大厂技术积累“达到瓶颈”的可能,又或者“开猿截流、降本增笑”的趋势的影响,2025 年上半年确实让跨平台框架...  阅读全文

posted @ 2025-07-16 10:28 Jack Jiang 阅读(68) | 评论 (0)编辑 收藏

Jack Jiang的 Mail: jb2011@163.com, 联系QQ: 413980957, 微信: hellojackjiang