CN104243274B - 一种消息处理方法及消息中心系统 - Google Patents
一种消息处理方法及消息中心系统 Download PDFInfo
- Publication number
- CN104243274B CN104243274B CN201310234886.1A CN201310234886A CN104243274B CN 104243274 B CN104243274 B CN 104243274B CN 201310234886 A CN201310234886 A CN 201310234886A CN 104243274 B CN104243274 B CN 104243274B
- Authority
- CN
- China
- Prior art keywords
- message
- module
- center system
- template
- package
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Computer And Data Communications (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明为了克服现有技术中对于消息转发分发处理中面对多线程同步时遇到的不易控制的问题,提供了一种消息处理方法及消息中心系统,所述系统包括:任务管理模块、消息生成模块、消息注册模块、消息打包模块、消息转发模块和消息拆包模块。本系统简化了消息传递过程中的线程同步问题,且消息内容数量与类型均没有限制,自由度和灵活度很高。
Description
技术领域
本发明涉及消息处理技术,更具体地,涉及一种消息处理方法及消息中心系统。
背景技术
商业软件的开发,大部分都需要有一些为其它模块提供服务的底层模块。这些底层模块由于实现的是一些通用功能,需要同时为几个高层模块提供功能,因此通常被设计成一种基于消息队列的框架。任何需要访问这些通用功能的高层模块,都可以通过发送消息并接受返回值来得到需要的服务。
这种构架的设计,一般是围绕消息队列来展开的:首先有一个消息队列,并对外暴露发送消息的API;然后实现一个负责维护并调度该消息队列的线程,该线程负责维护消息队列,并分发消息;最后是一系列处理特定消息的功能模块。消息由暴露给外层模块的API发送到消息队列,由调度线程接受消息,并分发给消息处理模块,然后由处理模块对不同消息进行处理,将处理结果返回给高层模块,这就是一个完善的基于消息队列的公用模块。为了实现这种模块的可扩展性,消息处理模块一般采取一种基于注册的设计,允许用户注册特定消息的消息处理函数。
Windows、Macintosh等操作系统都以线程(thread)作为系统的调度和运行单位,线程是比进程粒度更细的并行机制,它是程序内的动态执行流。1个任务内可以有多个线程并行运行,它们共享任务的所有资源,如内存空间。利用多线程可实现任务内的各子任务并行运行,提高事务处理效率。同任务内的多线程间可通过全局变量、文件、信号灯等方式实现同步。1个线程使自己处于睡眠(sleep)状态,等待所需要的事件发生,并由系统核心唤醒启动它。虽然此方式能实现同步多线程间的并行运行,但它不符合Windows程序结构,Windows系统的程序结构是以消息驱动方式构成的,主程序的消息循环部分从消息队列中获取与本程序有关的消息,并且送至相应的窗口过程函数,窗口过程函数负责接受并处理消息。如何在多线程间以消息传递方式来同步它们的并行运行,是值得讨论的问题。即每个线程都通过获取消息来驱动程序的运行,它们之间通过相互传递消息实现并行同步。当然实际中,由于对大量数据的共享,使得多线程间必须使用信号灯等同步方式来解决互斥问题。本文主要讨论关于多线程下消息处理的线程消息队列问题,线程管理问题,线程间消息传递问题以及所需的数据结构,最后还给出了线程消息处理模型。
Linux支持三种进程或线程之间的通信机制:消息队列、信号灯和共享内存。对这些资源的访问只能通过系统调用的方式进行。SystemVIPC对象权限都包含在一个ipcperm数据结构中,该结构包含了创建进程的用户和组标识符、针对这个对象的访问模式(属主、组和其他)和IPC对象的key。Linux支持两种key:公开的和私有的。如果key是公开的,那么任何进程只要通过了权限检查,就可以找到对应的系统IPC对象的引用标识符。在/usr/include/linux.ip.h中消息是在ipc/msg.c中实现,共享内存在ipc/shm.c,信号量在ipc/sem.c,管道在ipc/pipe.c中实现。信号量是一个可以用来控制多个进程或线程存取共享资源的计数器,经常作为一种锁定机制来防止多进程或多线程之间对临界资源或共享资源的访问冲突。目前多线程技术的发展已相当成熟,在许多的现代操作系统设计中均被引用,Linux中也有自己的线程管理机制,对于应用程序开发来说,使用多线程编程简化了编程的任务,改进了应用程序的效率。但是多线程之间的同步一直是Linux多线程编程中需要注意的问题。使用信号量原语可以有效地协调多线程之间对共享资源的访问,以保证程序运行结果的正确性。无疑,这对于编写Linux下的多线程应用程序有着重要的意义。
客户端程序设计中,随着软件复杂度的提升,模块的划分越来越明显,为了尽量降低模块之间的耦合度,需要一种消息注册和通知机制。传统的通知机制通常都是类似于Observer设计模式,通过函数回调来进行通知。
现有技术中的上述平台存在如下的主要缺点:
1.在比较大规模的项目中,各种消息可能来自不同的线程,模块之间的调用有不同的线程约束规则,线程同步等问题十分麻烦,容易带来各种问题;
2.传统的消息机制只能通过回调进行通知,无法将代码打包,不够灵活;
3.传统的消息机制消息携带信息类型和数量有限。
发明内容
为了克服现有技术中的上述缺陷和不足,本发明针对以上需求进行了设计,实现了一种基于主线程转发的消息中心系统。简化消息通知中的现成同步问题,对消息内容和类型没有限制。
本发明提供的一种消息中心系统,所述消息中心系统包括:
消息生成模块,接收到的用户通过客户端设置的消息,得到消息的内容,根据消息内容所属的类型和/或参数,查找对应的模板,并根据查找到的模板生成消息体;
消息注册模块,根据所述查找到的模板调用对应该模板的消息处理子模块,并向任务管理模块请求注册该查找到的模板、所述消息响应模块以及所述被生成的消息体;
消息打包模块,根据所述查找到的模板对消息体进行打包,得到消息包,所述消息包包括消息体编号和消息内容;
消息转发模块,将所述消息包发送到所述任务管理模块;
任务管理模块,仅对资源进行统一的调配和管理;所述任务管理模块还包括消息分发模块,由所述任务管理模块将消息包分发到已经注册的、与该消息体对应的消息响应模块;
消息响应模块,处理消息包中的消息内容。
进一步地,所述消息生成模块在查找对应的模板时,根据所属的类型和/或参数,在数据库中进行查找。
进一步地,所述消息响应模块包括消息拆包模块,解析所述消息包,获取消息体编号和消息内容。
进一步地,所述消息中心系统还包括消息回执模块,其向任务管理模块请求注销所述查找到的模板、所述消息响应模块以及所述被生成的消息体。
进一步地,所述消息中心系统还包括性能服务模块,与所述消息中心系统的其他模块相连,对其他模块进行工作状态监控和性能调整。
进一步地,所述性能服务模块还监控所述消息中心系统的流量和转发速度。
根据本发明的另一方面,还提供了一种消息处理方法,包括如下步骤:
(1)注册消息,通过消息中心注册接口注册消息响应;
(2)将消息编号与消息内容进行打包,形成一个消息包;
(3)将打包好的消息包转发;
(4)分发消息包;
(5)将打包的消息编号与消息内容拆分出来;
(6)根据消息编号进行处理。
本发明的有益效果在于:本发明的消息中心系统和消息处理方法简化了消息传递过程中的线程同步问题,且消息内容数量与类型均没有限制,自由度和灵活度很高。
附图说明
图1示出了根据本发明的实施例的消息中心系统的结构框图;
图2示出了根据本发明的实施例的消息处理方法的流程图。
具体实施方式
为了更清楚地描述本发明的技术方案,下面,将结合附图具体说明申请人在根据本发明的系统和方法实现的例如酷我音乐PC版的消息中心系统和消息处理方法的实施例。申请人在根据本发明的系统和方法实现的酷我k歌ios版、酷我音乐android pad版的消息中心系统和消息处理方法与PC版类似,在此不再赘述。
如图1所示的实施例中,基于主线程转发的酷我音乐PC版消息中心系统包括:歌曲选播信息生成模块1、歌曲选播信息注册模块2、歌曲选播信息打包模块3、歌曲选播信息转发模块4、任务管理模块5、歌曲选播信息响应模块6。
歌曲选播信息生成模块1接收到的用户通过PC机客户端(例如,用户通过PC机访问因特网的酷我音乐网或者通过下载并使用酷我音乐盒等在PC平台上任一具有远程点播功能的音乐播放器)设置的希望听到的歌曲的信息,包括歌曲名、歌手、演唱风格、专辑名称等,根据所述的歌曲的信息中的演唱风格(例如按照性别划分的男中音、男低音、男高音、女高音、女中音、女低音等,按照表现特征划分的抒情女高音、花腔女高音、戏剧女高音等),在PC机客户端的本地数据库中查找与该演唱风格相对应的风格模板(例如,对应于抒情女高音的风格模板定义了具有“音色明亮秀丽,优美抒情”特性的歌曲的音调、频率、音高等信息),并根据查找到的模板生成歌曲选播信息体。该信息体包括PC机客户端的IP地址和用户编号、风格模板信息,以及点播时间等。
在另一个实施例中,对于具有音乐专业知识的用户,可以对PC机客户端提供的音色、演唱者性别、最高音高、最低音高、节奏、乐器等信息的一种或多种信息加以选择和编辑,由该PC机客户端生成包括这些所选信息的选择编号,该选择编号是基于MS SQL的条件查询语句生成的。例如,当用户编辑并选择了包括演唱者性别、最高音高、最低音高和节奏这4项信息在内的信息以后,此时在PC机客户端的本地数据库中将选取自定义模板,将上述SQL语句添加入空白的自定义模板。必要时,这类语句可以不仅生成一个,相互之间用分号(“;”)等间隔。然后,生成包括如下信息的歌曲选播信息体:PC机客户端的IP地址和用户编号、所述自定义模板,以及点播时间等。
歌曲选播信息注册模块2根据所述查找到的模板调用对应该模板的歌曲选播信息处理子模块,并向任务管理模块5请求注册该查找到的模板、所述歌曲选播信息响应模块6以及所述被生成的歌曲选播信息体。在一个实施例中,可以将上述注册的信息定义为一个服务,并调用RegisterServiceCtrlHandler来注册服务的控制函数,这里要设置status.dwControlsAccepted为SERVICE_ACCEPT_STOP,以控制这个服务的状态。
歌曲选播信息打包模块3根据所述查找到的模板对歌曲选播信息体进行打包,得到歌曲选播信息包,所述歌曲选播信息包包括歌曲选播信息体编号和消息内容。在一个实施例中,所述编号是任务管理模块5赋予的该服务的ID。该信息包在生成过程中,还可以包括校验信息(例如CRC校验码),并通过一定的编码形式封装。
歌曲选播信息转发模块4,将所述歌曲选播信息包发送到所述任务管理模块5;
任务管理模块5位于服务器端,该模块没有使用定义新线程的方式处理信息转发的问题,而仅是对服务器端信息中心的主线程的资源进行统一的调配和管理。
这样也就同时避免了采用多线程同步时不得不面对的复杂的控制。
所述任务管理模块5还包括歌曲选播信息分发模块,由所述任务管理模块5将歌曲选播信息包分发到已经注册的、与该歌曲选播信息体对应的歌曲选播信息响应模块6;
歌曲选播信息响应模块6处理歌曲选播信息包中的演唱风格内容。
所述歌曲选播信息生成模块1在查找对应的模板时,根据所属的类型和/或参数,在服务器端的数据库中进行查找。当信息体包括的是非自定义模板时,服务器端的数据库按照用户给定的信息进行标准查找;当信息体包括的是自定义模板时,服务器端的数据库按照用户给定的信息直接执行SQL查找操作。
在基于上述各实施例的另一个实施例中,所述歌曲选播信息响应模块6包括歌曲选播信息拆包模块7,解析所述歌曲选播信息包,获取歌曲选播信息体编号和消息内容。该歌曲选播信息拆包模块7进行的操作与歌曲选播信息打包模块3基本相反。
在基于上述各实施例的另一个实施例中,所述歌曲选播信息中心系统100还包括歌曲选播信息回执模块8,其向任务管理模块5请求注销所述查找到的模板、所述歌曲选播信息响应模块6以及所述被生成的歌曲选播信息体。
在基于上述各实施例的另一个实施例中,所述歌曲选播信息中心系统100还包括性能服务模块9,与所述歌曲选播信息中心系统100的其他模块相连,对其他模块进行工作状态监控和性能调整。出于图1简洁清楚的考虑,图1中没有标记出该性能服务模块9。
在一个实施例中,为了稳定地保证消息中心系统更佳的性能,性能服务模块9定时控制所述消息中心系统的流量和转发速度,采用JDK中的Timer和TimerTask类实现任务管理模块5的定时器。在一个优选的实施例中,可以将流量控制的相关协议和信息保存在配置文件中,通过定时器控制读取配置文件来控制转发速度。
可选择地,所述性能服务模块9还监控所述歌曲选播信息中心系统100的流量和转发速度。
根据本发明的另一方面,还提供了一种歌曲选播信息处理方法,包括如下步骤:
(1)注册歌曲选播信息,通过歌曲选播信息中心注册接口注册歌曲选播信息响应;
(2)将歌曲选播信息编号与歌曲选播信息内容进行打包,形成一个歌曲选播信息包;
(3)将打包好的歌曲选播信息包转发到主线程中;
(4)主线程分发歌曲选播信息包;
(5)将打包的歌曲选播信息编号与歌曲选播信息内容拆分出来;
(6)根据消息编号进行处理。
在一个实施例中,上述方法可以根据图1的系统实现。
上面以文字和附图说明的方式阐释了本发明的结构和使用方法,并非详尽无遗或限制于上述所述具体形式,显而易见可根据上面所述进行适当的修改和优化。
Claims (7)
1.一种消息中心系统,其特征在于,所述消息中心系统包括:
消息生成模块,接收用户通过客户端设置的消息,得到消息的内容,根据消息内容所属的类型和/或参数,查找对应的模板,并根据查找到的模板生成消息体;
消息注册模块,根据所述查找到的模板调用对应该模板的消息处理子模块,并向任务管理模块请求注册该查找到的模板、消息响应模块以及所述被生成的消息体;
消息打包模块,根据所述查找到的模板对消息体进行打包,得到消息包,所述消息包包括消息体编号和消息内容;
消息转发模块,将所述消息包发送到所述任务管理模块;
任务管理模块,仅对资源进行统一的调配和管理;所述任务管理模块还包括消息分发模块,由所述任务管理模块将消息包分发到已经注册的、与该消息体对应的消息响应模块;
消息响应模块,处理消息包中的消息内容。
2.根据权利要求1所述的消息中心系统,其特征在于,所述消息生成模块在查找对应的模板时,根据所属的类型和/或参数,在数据库中进行查找。
3.根据权利要求1或2所述的消息中心系统,其特征在于,所述消息响应模块包括消息拆包模块,解析所述消息包,获取消息体编号和消息内容。
4.根据权利要求1或2所述的消息中心系统,其特征在于,所述消息中心系统还包括消息回执模块,其向任务管理模块请求注销所述查找到的模板、所述消息响应模块以及所述被生成的消息体。
5.根据权利要求1或2所述的消息中心系统,其特征在于,所述消息中心系统还包括性能服务模块,与所述消息中心系统的其他模块相连,对其他模块进行工作状态监控和性能调整。
6.根据权利要求5所述的消息中心系统,其特征在于,所述性能服务模块还监控所述消息中心系统的流量和转发速度。
7.一种消息处理方法,其特征在于,所述消息处理方法应用于如权利要求1所述的消息中心系统中,所述消息处理方法包括如下步骤:
(1)接收用户通过客户端设置的消息,得到消息的内容,根据消息内容所属的类型和/或参数,生成消息体;
(2)注册消息,通过消息中心注册接口注册消息体;
(3)对消息体进行打包,得到消息包,所述消息包包括消息体编号和消息内容;
(4)将打包好的消息包转发;
(5)分发消息包;
(6)将打包的消息编号与消息内容拆分出来;
(7)根据消息编号进行处理。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310234886.1A CN104243274B (zh) | 2013-06-14 | 2013-06-14 | 一种消息处理方法及消息中心系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310234886.1A CN104243274B (zh) | 2013-06-14 | 2013-06-14 | 一种消息处理方法及消息中心系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104243274A CN104243274A (zh) | 2014-12-24 |
CN104243274B true CN104243274B (zh) | 2017-12-15 |
Family
ID=52230666
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310234886.1A Active CN104243274B (zh) | 2013-06-14 | 2013-06-14 | 一种消息处理方法及消息中心系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104243274B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109426562B (zh) * | 2017-08-30 | 2023-10-13 | 北京忆恒创源科技股份有限公司 | 优先级加权轮转调度器 |
CN108829502B (zh) * | 2018-06-21 | 2021-11-23 | 北京奇虎科技有限公司 | 线程操作的实现方法和装置 |
CN110825443A (zh) * | 2018-08-13 | 2020-02-21 | 深圳市冠旭电子股份有限公司 | 一种智能音箱的信息交互方法及终端设备 |
CN109246226A (zh) * | 2018-09-25 | 2019-01-18 | 行吟信息科技(上海)有限公司 | 一种消息生成方法及装置 |
CN109697132A (zh) * | 2018-12-19 | 2019-04-30 | 武汉精立电子技术有限公司 | 一种终端设备的即时通信系统及方法 |
CN111858561B (zh) * | 2020-07-26 | 2023-08-15 | 芯河半导体科技(无锡)有限公司 | 一种基于gpon路由器的数据存储管理系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101094227B (zh) * | 2007-07-18 | 2010-09-15 | 中山大学 | 一种基于cs架构的移动平台联网游戏消息交互方法 |
CN102486926A (zh) * | 2010-12-03 | 2012-06-06 | 上海博泰悦臻电子设备制造有限公司 | 个性化音乐媒体信息获取方法及系统 |
CN102571550A (zh) * | 2010-12-30 | 2012-07-11 | 北京亿阳信通软件研究院有限公司 | 一种通用的信息交互平台和方法 |
CN102904961A (zh) * | 2012-10-22 | 2013-01-30 | 浪潮(北京)电子信息产业有限公司 | 一种云计算资源调度方法及系统 |
-
2013
- 2013-06-14 CN CN201310234886.1A patent/CN104243274B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101094227B (zh) * | 2007-07-18 | 2010-09-15 | 中山大学 | 一种基于cs架构的移动平台联网游戏消息交互方法 |
CN102486926A (zh) * | 2010-12-03 | 2012-06-06 | 上海博泰悦臻电子设备制造有限公司 | 个性化音乐媒体信息获取方法及系统 |
CN102571550A (zh) * | 2010-12-30 | 2012-07-11 | 北京亿阳信通软件研究院有限公司 | 一种通用的信息交互平台和方法 |
CN102904961A (zh) * | 2012-10-22 | 2013-01-30 | 浪潮(北京)电子信息产业有限公司 | 一种云计算资源调度方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104243274A (zh) | 2014-12-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104243274B (zh) | 一种消息处理方法及消息中心系统 | |
CN109739604B (zh) | 页面渲染方法、装置、服务器及存储介质 | |
CN103002274B (zh) | 一种基于离线下载的移动多媒体实时转码播放系统及方法 | |
JP4038564B2 (ja) | コンピュータ型システムおよびデータ処理タスクを実行する方法 | |
RU2357289C2 (ru) | Администрирование удаленной системы с использованием среды командной строки | |
CN101719902B (zh) | 一种远程过程调用方法和系统 | |
MXPA03000095A (es) | Sistemas y metodos para administrar drivers en un sistema informatico.. | |
CN104102949B (zh) | 一种分布式工作流装置及其处理工作流的方法 | |
CN108322496A (zh) | 镜像文件分发方法及系统、计算机可读存储介质、电子设备 | |
WO2011150777A1 (zh) | Web应用的开发装置及其开发方法 | |
JP7195363B2 (ja) | レイテンシを考慮したディスプレイモード依存応答生成 | |
CN111818194A (zh) | 基于域名的访问系统和方法 | |
CN109815025A (zh) | 业务模型调用方法、装置及存储介质 | |
CN106713469B (zh) | 用于分布式容器的动态加载方法、装置及系统 | |
CN111026982A (zh) | 智能合约处理方法、计算机设备及存储介质 | |
WO2022247201A1 (zh) | 一种数据查询方法及装置 | |
CN109254851A (zh) | 一种调度gpu的方法及相关装置 | |
CN108777818A (zh) | 一种直播软件支持同时多路推流的方法 | |
CN112269565A (zh) | 基于容器的边缘设备运行方法、装置和系统 | |
CN113382033A (zh) | 中控适配方法、装置、设备和存储介质 | |
Vieira et al. | Sunflower: an environment for standardized communication of IoMusT | |
CN113204425B (zh) | 供进程管理内部线程的方法、装置、电子设备及存储介质 | |
CN106453250B (zh) | 一种大数据rpc的处理方法 | |
CN105893160B (zh) | 一种多接口数据的调度方法 | |
CN113535419A (zh) | 一种服务编排方法和装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |