消息中心

article/2025/9/1 12:49:43

1      系统结构

消息中心体系结构如下图所示:

 

图中红色线表示移动消息的推送路径。

 

此结构适用于企业消息中心,也适用于平台,消息推送代理的消息推送服务接口(Web Service)可以作为开放服务。

本地服务器是消息源。

新生成消息时,如果PC客户端在线,,则消息直接发送给客户端。否则,如果该用户启用了该应用的推送服务,都通过移动消息中心向移动客户端推送,无论移动客户端是否在线。

 

消息推送代理负责从消息存储库提取消息,根据用户的设备操作系统类型调用不同操作系统的消息推送服务提供者(Push Service Provider)。

图中标示了iOS和Andriod系统的推送服务提供者。

IOS Push Service Provider需要访问Apple的APNs。

 

消息推送服务接口是消息推送代理的接口,采用WebService实现。

 

应用服务器服务PC客户端和移动客户端,由本地消息引擎提供消息推送服务。需要推送到移动设备时,通过消息推送服务接口调用移动推送中心的服务。

 

本地数据库存储用户消息,和决定消息推送和移动推送的必要信息(设备信息,应用推送设置信息)。

 

 

2      移动推送中心

 

2.1    移动推送代理(Mobile Push Service Porter)

移动推送代理是移动消息推送中心的服务提供者。

 

接收到移动推送请求时,先保存在本地消息存储库中。写入后,唤醒后台服务执行推送。保存的目的有:

l  没有可用的Push Service Provider时,先保存然后等有可用的服务器时再执行发送

l  流量统计

 

推送时根据不同的操作系统类型,调用对应的PushService Provider服务。

移动推送代理与Push ServiceProvider之间通过网络通信(对于iOS和Andriod可以采用此方式)。

 

移动消息代理以Web Service方式提供服务。(采用gSOAP实现,参见WebSerice插件)

 

WebService插件(WSB-Web Service Box)的结构调整:

作为一个Web Service服务 容器,可以加载多个提供不同WebService的服务模块。chargeService(收费服务)是其中一个模块。

新增加push_notofication_Service服务(移动推送服务模块)。

 

2.2    推送服务提供者(Push Service Provider)

实际执行移动消息推送的服务器,iOS和Andriod分别实现。

每种系统的Push ServiceProvider可以单独建立集群。

l  iOS

iOS系统的推送通知服务利用APNS(Apple-PNS:苹果推送通知服务)。

l  Andriod

Andriod实现: XMPP协议

Android push notification(androidpn) 是一个基于XMPP协议的java开源实现,它包含了完整的客户端和服务器端。 

 

3      本地消息引擎(NativeMessage Engine)

本地消息引擎结构如下图所示:

消息服务接口是外部访问本地消息引擎的API。

消息服务模块负责处理与消息相关的协议,消息存储库扫描,执行推送(直接到客户端或者调用移动推送模块)。

移动推送模块通过Web Service调用移动推送中心的推送服务(通过 IPushNotificationService接口)。

 

 

4      接口

4.1    本地消息引擎服务接口(IMessageService)

interface IMessageService {

public:

         int Save(CMessage *msg); ///< 保存消息

         int Query(CQueryCondtion &cond,vector<CMessage*> &data); ///< 查询接口方法,可能是多个,如:查询数量,按条件查询

        

         int Delete(__int64 object_id); ///< 删除指定的消息.

};

 

 

4.2    消息推送服务接口(IPushNotificationService)

interface IPushNotificationService {

public:

         int Send(CMobileMessage *msg);

};

 

 

 

 

5      消息盒子

有三种类型消息盒子:

应用内置(Built-inMBox:B-MBox):客户端进程的一部分,有2种使用方式:

客户端进程独享:外部不能访问

应用共享:不同的客户端应用可以通过消息盒子API访问(不支持)

独立消息盒子应用(ApplicationMbox:A-MBox),为所有应用共享:

系统消息盒子(SystemMBox:S-MBox):由操作系统提供,与App MBox类似,只是消息盒子的提供者不同。

 

可以设想存在A-MBox的第三方应用。目前,我们不打算使用,也不计划开发。

(PushMessenger大概可以归于这类应用,见http://push.since2006.com/)

 

B-MBox是本系统实现的目标,且只能在进程内使用。

消息盒子的结构如下图所示:

图中有3个组成部分:

l  消息盒子

l  客户端框架:消息盒子通过框架与服务器通信,接收并分派通知到消息盒子,通知消息的确认也是由消息盒子统一通过框架与服务器协作完成。客户端框架可以是PC客户端框架(ESE或者Hotfox),或者是移动客户端框架(UMDP)。

l  通知处理器:是消息盒子的使用者,负责具体的应用通知的处理。可以是一个窗口,插件,或者一个线程。

              

5.1    协议处理器

负责处理用户通知消息(680-Indication)。由客户端框架的协议分发器调度执行。

协议处理器在处理消息时,调用通知控制管理器的on_receive方法。

 

5.2    通知控制管理器

是消息盒子的核心。负责以下功能:

l  启动时从客户端sqlite数据库中加载缓存的消息类别信息,并负责版本比较和更新缓存

l  接受通知处理器的注册

l  接受外部指定的通知提示器

l  在on_receive函数中,在内存中组织通知,调用注册的通知处理器

l  提供通知管理功能:在窗口中显示接收到的通知,允许用户交互操作。

l  负责提示:调用应用指定的提示器,在接收到通知时提醒用户。PC端和移动端可以自定义提示器以满足不同设备和应用的需要。(选择一种提示器作为默认的内置提示器,如该提示器在PC上在托盘区提示,点击后弹出通知显示窗口,在存在多个通知时按消息类别分类显示,统计)

 

 



http://chatgpt.dhexx.cn/article/GqFKWo2h.shtml

相关文章

消息中心(系统消息)实现

需求 用户能即时的收到来自系统或者其他用户发来的消息&#xff0c;在web界面右下角弹窗提醒&#xff0c;用户还能标记消息是否已阅状态。 即时通讯 概念&#xff1a;即时通讯&#xff08;实时通信&#xff0c;Instant Messaging&#xff0c;简称IM&#xff09;是一个实时通…

消息中心设计

1 参考文档 产品参考&#xff1a;消息通知系统设计 | 人人都是产品经理 (woshipm.com) 2 消息中心目标职责 消息中心仅作为消息发送使用&#xff0c;跟业务没有任何关系&#xff0c;涉及到业务部分有业务系统自行处理&#xff1b;消息中心的功能只有消息生产、消息展示、消息推…

如何设计一个消息中心

如今的内容型产品&#xff0c;不管提供的是什么类型的内容&#xff0c;在其主功能之外&#xff0c;不可避免的会有另一个十分重要的功能——消息中心。 而无论是信息流、论坛、信箱&#xff0c;还是私聊、群聊、通知&#xff0c;推拉模型是内容型&#xff08;包括&#xff1a;社…

聊聊消息中心的设计与实现逻辑

厌烦被消息打扰&#xff0c;又怕突然间的安静&#xff1b; 一、业务背景 微服务的架构体系中&#xff0c;会存在很多基础服务&#xff0c;提供一些大部分服务都可能需要的能力&#xff0c;比如文件管理、MQ队列、缓存机制、消息中心等等&#xff0c;这些服务需要提供各种可以复…

4. 消息中心的设计与实现

消息中心的设计与实现 一、引言 运用场景&#xff1a; 1、消息的主动提醒&#xff08;客户端被动接收&#xff09; 2、客户模块&#xff08;及时通讯&#xff09; 3、单一登录&#xff08;一个账号只能在一个设备登录&#xff09; 消息中心的实现方案&#xff1a; 1、客户端轮…

mysql格式化数字去掉千分位

前言 使用format格式化数字时&#xff0c;超过1000就会有千分位&#xff0c;但有时我们不希望有这个千分位&#xff0c;那怎么去掉呢&#xff1f; 1. select format(11111.123,2) 2. select convert(11111.123,decimal(12,2))

upper mysql_MySQL函数

MySQL函数 Lower 转换小写 upper 转换大写 substr 取子串(substr(被截取的字符串,起始下标,截取的长度)) length 取长度 trim 去空格 str_to_date 将字符串转换成日期 date_format 格式化日期 format 设置千分位 round 四舍五入 rand() 生成随机数 Ifnull 可以将null转换成一个…

MySql FORMAT 去掉千位分隔符,

加上墨西哥的地区参数即可 SELECT FORMAT(35555566.8, 2, es_MX) AS value; 结果

MySQL知识总结

目录 知识点条件查询排序常见单行处理函数&#xff08;可嵌套&#xff09;多行处理函数分组查询distinct去重 连接查询⭐⭐⭐⭐⭐内连接外连接多表连接&#xff08;两张表以上&#xff09; 子查询where子句中的子查询from 子句中的子查询select后面出现的子查询 union合并查询结…

MySQL知识点

总结汇总MySQL数据库面试题&#xff08;2020最新版&#xff09;_ThinkWon的博客-CSDN博客_mysql数据库面试题 1. 索引 &#xff08;1&#xff09;主键索引 唯一非空&#xff0c;属于聚簇索引 &#xff08;2&#xff09;唯一索引 unique 可为空(多个null也可) &#xff08;3&…

mysql 处理金额_MYSQL处理金额相关函数

1.FORMAT()数字千分位分割 FORMAT(X,D) 1.X需要格式化的数字 2.D保留小数位数 例:SELECT FORMAT(12334555.213,2) 2.ABS() 求绝对值 ABS(X) SELECT ABS(-23); SELECT ABS(21-23); SELECT ABS(23); 3.四舍五入保留小数 ROUND(X,D) 1.X需要格式化的数字 2.D保留小数位数(不写时默…

C语言字符数组的输入和输出

字符数组的输入输出有两种方法&#xff1a; &#xff08;1&#xff09;逐个字符输入输出。用格式符“%c”输入或输出一个字符。例如 int main() {char c[6]; //定义一个字符串for (int i 0; i < 5; i){scanf("%c", &c[i]); //输入字符串}for (int i 0; …

C语言 | 字符数组

C语言字符数组的定义 字符数组是用来存放字符数据的数组&#xff0c;字符数组中的一个元素存放一个字符&#xff0c;定义字符数组的方法和定义数值型数组的方法类似。 //例子&#xff1a;char character[10];C语言字符数组的初始化 C语言对字符数组初始化&#xff0c;最容易理解…

C语言,字符数组与字符串

文章目录 字符数组基本介绍字符串注意事项字符串的访问和遍历字符串的表示形式用字符数组存放一个字符串&#xff1a; 用字符数组存放一个字符串,用字符指针指向一个字符串使用字符指针变量和字符数组两种方法表示字符串的讨论 字符串相关函数常用字符串函数一览字符串函数应用…

浅谈字符数组

文章目录 一、什么是字符数组二、字符数组的定义和赋值1. 先定义一个数组&#xff0c;再为挨个元素进行赋值2. 在定义的同时给该字符数组进行初始化2.1 错误的初始化方式2.2 正确的初始化方式 3. 特别注意&#xff01;&#xff01;&#xff01;3.1 字符数组和整型数组一样不支持…

字符数组

字符数组 用来存放字符数据的数组是字符数组。字符数组中的每一个元素存放一个字符&#xff0c;其定义和使用方法与其他类型的数据基本相似。 1.1字符数组的定义和使用 字符数组的定义与其他类型的数组类似&#xff0c;标准形式如下&#xff1a; Char 数组名 【常量表达式】 …

Stata:嵌套Logit模型(NestedLogit)

原文链接&#xff1a;https://www.lianxh.cn/news/d5e00bfb17a7c.html 致谢&#xff1a; 这篇推文的核心内容主要来自陈强老师编著的《高级计量经济学及 Stata 应用》一书&#xff0c;特此致谢。 1. 简介 此前&#xff0c;连享会发布了一系列离散选择模型相关的推文&#xff0…

MNL——多项Logit模型学习笔记(二)

本节将会通过案例举例&#xff0c;介绍Logit模型的建模思路和过程 内容为摘抄他人学习资料的个人学习笔记&#xff0c;如有侵权则删 1.正确打开/解读Logit模型系数的方式 本节的具体内容在笔记里不详细表示了&#xff0c;大家在软件里拟合Logit模型时&#xff0c;对于其中的参…

logit回归模型的参数估计过程_【DCM07】Random Parameter(随机参数)Logit模型及其Nlogit实现...

本文是离散选择模型系列的第7篇原创文章,将详细介绍随机参数Logit模型,并利用Nlogit软件进行实操演示。【关注本公众号,可以获取数据和代码】本文公式较多,建议电脑端享用。 目录 1、随机参数Logit模型介绍 2、数据描述 3、随机参数Logit模型的参数估计 1 随机参数Logit模型…

MNL——多项Logit模型学习笔记(三)二项Logit模型、Gumble分布以及Logistic分布

上一节最后一部分&#xff0c;介绍了Provit模型&#xff0c;从建模的角度来说&#xff0c;Probit模型假设随机项服从正态分布&#xff0c;这是具有一定的合理性的——也是其优点&#xff1b;但是Probit模型没有闭合解——每次算P(n)i 的值的时候都需要求积分&#xff0c;这就给…