百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

基于CMPP协议集成短信测试桩全流程实践分享

liebian365 2024-11-17 13:12 20 浏览 0 评论

前言:

极光短信属于极光推送的一块业务,极光短信最大的优势是针对推送消息未送达的用户进行补发短信,既保证消息触达又节省成本,以及认证短信或者其他业务场景都需要用到短信功能。

极光短信业务最底层是真实对对接运营商,使用的cmpp协议发送短信,而在测试环境中, 不可能对真实环境来验证短信功能,原因:

1.测试需要发送大量的短信,费用会很高

2.需要模拟各种异常的消息 ,真实运营商有很多规则才能触发异常

3.需要对运营商快速返回各种错误,真实运营商可能会延迟,不利于测试

4.还需要针对大量数据时进行限速设置等各种场景

所以针对以上4点的考虑,最终我们选择自己“创建”一个运营商来处理数据客户端发来的数据,满足日常的短信业务测试

在模拟之前,我们需要对运营商使用的底层协议,交互方式,数据处理方式进行确认,才能更好的建立一个自己的“运营商”。


术语解释

1.认识cmpp协议

1.1网络结构

如图1所示,互联网短信网关(ISMG)是外部信息资源站实体(SP)与移动网内短信中心之间的中介实体,互联网短信网关一方面负责接收SP发送给移动用户的信息和提交给短信中心。另一方面,移动用户点播SP业务的信息将由短信中心通过互联网短信网关发给SP。


1.2 CMPP功能概述

以下内容来自cmpp2.0文档的的介绍

短信接收(Short Message Mobile Terminated,SM MT) 典型的业务操作举例如图3所示:

图3 需要前转的MT示意图

1.SP发出数据请求(可能是短信通知或手机铃声等),被源ISMG接收;

2.源ISMG对接收到的信息返回响应;

3.源ISMG在本地数据库中找不到手机号段所对应网关代码,向GNS(汇接网关)发路由请求信息;

4.汇接网关将路由信息返回;

5.源ISMG根据路由信息将请求转给目的ISMG;

6.目的ISMG对接收到的信息返回响应;

7.目的ISMG将请求信息发送至SMC;

8.SMC向目的ISMG返回响应;


2.协议栈

CMPP协议以TCP/IP作为底层通信承载,具体结构由图2所示:

图 2.1CMPP协议栈

ICP与ISMG以Clientmdash;Server方式建立TCP连接,用于双方信息的相互提交。TCP/IP连接建立后,由Client发起建立应用层的连接,这时如果ICP或ISMG认为需要建立TLS连接,则在传输的数据包中置TLS字段,从而在双方建立TLS连接。

在应用层连接建立后的数据传输过程中,如果ICP或ISMG需要向对端发送加密信息,也可建立TLS连接,这时只需要置相应的消息体中Tls_available(是否使用TLS层)属性字段, 本条消息的消息体中的其他属性不发送。

消息采用并发方式发送,加以滑动窗口流量控制,即接收方在应答前一次收到的消息多于窗口大小条将予以拒绝。流程图如图3所示:

2.1.消息定义

消息定义是客户端与服务端之间“沟通的方式” 以下是cmpp协议内容的定义 (其中的一个鉴权协议)

基本数据类型

消息结构

消息头格式(Message Header)

CMPP_CONNECT消息定义(SPàISMG)

CMPP_CONNECT消息定义

CMPP_CONNECT_RESP消息定义(ISMG à SP)

3.构建服务端

3.1短信测试桩架构分析

业务处理流程。如图3.2所示

图3.2

处理流程说明

1.服务端收到一条为39个字节的长度的请求数据,由于头部固定为12字节,剩余为27个字节

2.根据以上的协议27个字节长度判断是需要建立连接

3.获取客户端的连接的用户名与密码,解析AuthenticatorISMG字段验证是否鉴权成功

4.成功进行下一步操作 (需要回应 鉴权成功),在根据建立的连接后,对获取的数据进行处理,返回内容

我们以鉴权部分提取它的主要代码: 取出头部数据包

获取主体内容,鉴权内容

日志展示

3.2效果展示

短信测试桩目前已在测试环境中运行了2年多,帮助公司节省了一大笔测试费用,以下是它展示的效果内容


在iportal上展示,发送成功状态。

在iportal上展示,发送失败状态。

在iportal上展示,已发送的状态。

Iportal上展示,余额不足的状态

3.3短信模拟桩遇到的问题

1.发送的请求数据量已经超过窗口大小

当客户端发送的数量超过了大小处理大小,服务端进行限流,让任务进行排队处理并对它返回响应的code,以减轻服务端压力

2.代码建立无效的链接,浪费资源

建立一个连接,就存储一个连接,当无效链接时,需要删除连接,如何判定无效,心跳连接不在建立,或建立连接后,20分钟内都没有发送消息(测试环境),服务端对断链进行处理

3.语言的选项,以及方案设计

可选择java以及Python语言都可以,考虑Python在公司的使用程度较高,选择Python

选择Python的类有struct模块,用户解析字节数据,使用gevent来解决协程,或者是Python提供的多进程

4.消息粘包

读取数据时,根据头部的长度信息,按序读取ioArgs缓冲区中的数据,若没有达到长度要求,继续读下一个ioArgs解决粘包、半包问题。

我们逐步完善测试桩,它不仅具有解析数据的功能,发送报告,保持心跳、处理不同错误code,我们也提升了处理速度,以前是1分钟处理10个,现在1分钟能处理300个,满足我们大批量数据速度的一个提升,完善了我们各种场景的测试。

相关推荐

“版本末期”了?下周平衡补丁!国服最强5套牌!上分首选

明天,酒馆战棋就将迎来大更新,也聊了很多天战棋相关的内容了,趁此机会,给兄弟们穿插一篇构筑模式的卡组推荐!老规矩,我们先来看10职业胜率。目前10职业胜率排名与一周前基本类似,没有太多的变化。平衡补丁...

VS2017 C++ 程序报错“error C2065:“M_PI”: 未声明的标识符"

首先,程序中头文件的选择,要选择头文件,在文件中是没有对M_PI的定义的。选择:项目——>”XXX属性"——>配置属性——>C/C++——>预处理器——>预处理器定义,...

东营交警实名曝光一批酒驾人员名单 88人受处罚

齐鲁网·闪电新闻5月24日讯酒后驾驶是对自己和他人生命安全极不负责的行为,为守护大家的平安出行路,东营交警一直将酒驾作为重点打击对象。5月23日,东营交警公布最新一批饮酒、醉酒名单。对以下驾驶人醉酒...

Qt界面——搭配QCustomPlot(qt platform)

这是我第一个使用QCustomPlot控件的上位机,通过串口精确的5ms发送一次数据,再将读取的数据绘制到图表中。界面方面,尝试卡片式设计,外加QSS简单的配了个色。QCustomPlot官网:Qt...

大话西游2分享赢取种族坐骑手办!PK趣闻录由你书写

老友相聚,仗剑江湖!《大话西游2》2021全民PK季4月激燃打响,各PK玩法鏖战齐开,零门槛参与热情高涨。PK季期间,不仅各种玩法奖励丰厚,参与PK趣闻录活动,投稿自己在PK季遇到的趣事,还有机会带走...

测试谷歌VS Code AI 编程插件 Gemini Code Assist

用ClaudeSonnet3.7的天气测试编码,让谷歌VSCodeAI编程插件GeminiCodeAssist自动编程。生成的文件在浏览器中的效果如下:(附源代码)VSCode...

顾爷想知道第4.5期 国服便利性到底需优化啥?

前段时间DNF国服推出了名为“阿拉德B计划”的系列改版计划,截至目前我们已经看到了两项实装。不过关于便利性上,国服似乎还有很多路要走。自从顾爷回归DNF以来,几乎每天都在跟我抱怨关于DNF里面各种各样...

掌握Visual Studio项目配置【基础篇】

1.前言VisualStudio是Windows上最常用的C++集成开发环境之一,简称VS。VS功能十分强大,对应的,其配置系统较为复杂。不管是对于初学者还是有一定开发经验的开发者来说,捋清楚VS...

还嫌LED驱动设计套路深?那就来看看这篇文章吧

随着LED在各个领域的不同应用需求,LED驱动电路也在不断进步和发展。本文从LED的特性入手,推导出适合LED的电源驱动类型,再进一步介绍各类LED驱动设计。设计必读:LED四个关键特性特性一:非线...

Visual Studio Community 2022(VS2022)安装图文方法

直接上步骤:1,首先可以下载安装一个VisualStudio安装器,叫做VisualStudioinstaller。这个安装文件很小,很快就安装完成了。2,打开VisualStudioins...

Qt添加MSVC构建套件的方法(qt添加c++11)

前言有些时候,在Windows下因为某些需求需要使用MSVC编译器对程序进行编译,假设我们安装Qt的时候又只是安装了MingW构建套件,那么此时我们该如何给现有的Qt添加一个MSVC构建套件呢?本文以...

Qt为什么站稳c++GUI的top1(qt c)

为什么现在QT越来越成为c++界面编程的第一选择,从事QT编程多年,在这之前做C++界面都是基于MFC。当时为什么会从MFC转到QT?主要原因是MFC开发界面想做得好看一些十分困难,引用第三方基于MF...

qt开发IDE应该选择VS还是qt creator

如果一个公司选择了qt来开发自己的产品,在面临IDE的选择时会出现vs或者qtcreator,选择qt的IDE需要结合产品需求、部署平台、项目定位、程序猿本身和公司战略,因为大的软件产品需要明确IDE...

Qt 5.14.2超详细安装教程,不会来打我

Qt简介Qt(官方发音[kju:t],音同cute)是一个跨平台的C++开库,主要用来开发图形用户界面(GraphicalUserInterface,GUI)程序。Qt是纯C++开...

Cygwin配置与使用(四)——VI字体和颜色的配置

简介:VI的操作模式,基本上VI可以分为三种状态,分别是命令模式(commandmode)、插入模式(Insertmode)和底行模式(lastlinemode),各模式的功能区分如下:1)...

取消回复欢迎 发表评论: