一种系统消息的处理方法和服务器

申请号 CN201610356163.2 申请日 2016-05-25 公开(公告)号 CN105848291A 公开(公告)日 2016-08-10
申请人 努比亚技术有限公司; 发明人 刘孟焱;
摘要 一种系统消息的处理方法,包括: 服务器 发布系统消息时,以自增连续的方式为所述系统消息生成一序列标识;接收到终端的获取系统消息未读数的 请求 后,将 指定 时期内的系统消息的总数作为系统消息未读数发送给首次请求获取系统消息未读数的终端,或者将当前最新发布的系统消息的序列标识与对应用户上次已读的系统消息的序列标识的差值作为系统消息未读数发送给所述终端。本方案能够减轻服务器处理系统消息的压 力 。
权利要求

1.一种服务器,其特征在于,包括:
发布模,用于发布系统消息时,以自增连续的方式为所述系统消息生成一序列标识;
传输模块,用于接收到终端的获取系统消息未读数的请求后,将指定时期内的系统消息的总数作为系统消息未读数发送给首次请求获取系统消息未读数的终端,或者将当前最新发布的系统消息的序列标识与对应用户上次已读的系统消息的序列标识的差值作为系统消息未读数发送给所述终端。
2.根据权利要求1所述的服务器,其特征在于,所述服务器还包括记录模块,所述传输模块,还用于接收到所述终端的获取未读系统消息的请求后,将当前最新系统消息的序列标识与所述发送给所述终端的系统消息的最大的序列标识之间的系统消息发送给所述终端;
所述记录模块,用于记录所述当前最新系统消息的序列标识。
3.根据权利要求1或2所述的服务器,其特征在于,所述服务器还包括:检查模块和删除模块,
所述检查模块,用于定时检查所述终端的登录时间,确定所述终端最后的登录时间距检查时超过指定时间时,通知所述删除模块;
所述删除模块,用于将缓存的距检查时超过所述指定时间的、对应用户获取过的系统消息的序列标识删除。
4.根据权利要求3所述的服务器,其特征在于,
所述传输模块,还用于接收到所述终端的登录请求后,将距所述终端登录时指定时间内的发布的系统消息的消息数信息发送给所述终端。
5.一种系统消息的处理方法,其特征在于,包括:
服务器发布系统消息时,以自增连续的方式为所述系统消息生成一序列标识;
所述服务器接收到终端的获取系统消息未读数的请求后,将指定时期内的系统消息的总数作为系统消息未读数发送给首次请求获取系统消息未读数的终端,或者将当前最新发布的系统消息的序列标识与对应用户上次已读的系统消息的序列标识的差值作为系统消息未读数发送给所述终端。
6.根据权利要求5所述的处理方法,其特征在于,
所述服务器在发布一条所述系统消息的过程中,不接受其它系统消息的发布处理。
7.根据权利要求6所述的处理方法,其特征在于,所述服务器将系统消息未读数发送给所述终端后,还包括:
所述服务器记录发送给所述终端的系统消息的最大的序列标识。
8.根据权利要求7所述的处理方法,其特征在于,所述服务器记录发送给所述终端的系统消息的最大的序列标识后,还包括:
所述服务器接收到所述终端的获取未读系统消息的请求后,将当前最新系统消息的序列标识与所述发送给所述终端的系统消息的最大的序列标识之间的系统消息发送给所述终端,并记录所述当前最新系统消息的序列标识。
9.根据权利要求6-8任一项所述的处理方法,其特征在于,还包括:
所述服务器定时检查所述终端的登录时间,确定所述终端最后的登录时间距检查时超过指定时间时,将缓存的距检查时超过所述指定时间的、对应用户获取过的系统消息的序列标识删除。
10.根据权利要求9所述的处理方法,其特征在于,还包括:
接收到所述终端的登录请求后,将距所述终端登录时指定时间内的发布的系统消息的消息数信息发送给所述终端。

说明书全文

一种系统消息的处理方法和服务器

技术领域

[0001] 本申请涉及但不限于通信领域,尤指一种系统消息的处理方法和服务器。

背景技术

[0002] 在移动应用中,经常有系统通知或者广播。需要去判断用户未读的个数和输出用户未读的列表。当系统管理员在后台发出一条广播后,用户App(应用软件)上的消息图标显示小红点,当用户点击图标进入广播列表查看消息内容后,小红点消除。
[0003] 目前采用的推送方式,直接推给客户端,客户端已读后,消息就丢失了,用户无法再次查看,影响用户体验。该技术方案的实现存在以下问题:
[0004] 在未读计算的时候,服务器大多需要采用SQL(Structured Query Language,结构化查询语言)中的统计函数去统计用户的未读数。由于获取未读的请求对于客户端来说是轮询的(一般5分钟轮询1次),这种数据又不能做缓存,只能依赖于实时的计算,对数据库服务器造成较大的压发明内容
[0005] 为了解决上述技术问题,本发明实施例提供了一种系统消息的处理方法和服务器,能够减轻服务器处理系统消息的压力。
[0006] 为了达到本发明目的,本发明提供了一种服务器,包括:
[0007] 发布模,用于发布系统消息时,以自增连续的方式为所述系统消息生成一序列标识;
[0008] 传输模块,用于接收到终端的获取系统消息未读数的请求后,将指定时期内的系统消息的总数作为系统消息未读数发送给首次请求获取系统消息未读数的终端,或者将当前最新发布的系统消息的序列标识与对应用户上次已读的系统消息的序列标识的差值作为系统消息未读数发送给所述终端。
[0009] 本实施例的服务器通过连续的id,在计算未读数的时候通过简单的id相减就可以得出用户的未读数,减少了服务器在处理未读系统消息的负担。
[0010] 可选地,所述服务器还包括记录模块,
[0011] 所述传输模块,还用于接收到所述终端的获取未读系统消息的请求后,将当前最新系统消息的序列标识与所述发送给所述终端的系统消息的最大的序列标识之间的系统消息发送给所述终端;
[0012] 所述记录模块,还用于记录所述当前最新系统消息的序列标识。
[0013] 本实施例仅将当前与终端上次获取的系统消息时之间的发布的系统消息发送给终端,这样可以避免重复向终端重复发送系统消息。本实施例的服务器记录终端已获取的系统消息未读数,可以方便下次计算系统消息未读数。
[0014] 可选地,所述服务器还包括:检查模块和删除模块,
[0015] 所述检查模块,用于定时检查所述终端的登录时间,确定所述终端最后的登录时间距检查时超过指定时间时,通知所述删除模块;
[0016] 所述删除模块,用于将缓存的距检查时超过所述指定时间的、对应用户获取过的系统消息的序列标识删除。
[0017] 本实施例的服务器删除不活跃终端超过指定时期的系统消息的序列标识的存储,以节省存储空间。
[0018] 可选地,所述传输模块,还用于接收到所述终端的登录请求后,将距所述终端登录时指定时间内的发布的系统消息的消息数信息发送给所述终端。
[0019] 本实施例的方法仅向不活跃的客户端发送一定时期内的系统消息,这样可以减少服务器的负担。
[0020] 本发明实施例还提供一种系统消息的处理方法,包括:
[0021] 服务器发布系统消息时,以自增连续的方式为所述系统消息生成一序列标识;
[0022] 所述服务器接收到终端的获取系统消息未读数的请求后,将指定时期内的系统消息的总数作为系统消息未读数发送给首次请求获取系统消息未读数的终端,或者将当前最新发布的系统消息的序列标识与对应用户上次已读的系统消息的序列标识的差值作为系统消息未读数发送给所述终端。
[0023] 本实施例的方法通过连续的id,在计算未读数的时候通过简单的id相减就可以得出用户的未读数,减少了服务器在处理未读系统消息的负担。
[0024] 可选地,所述服务器在发布一条所述系统消息的过程中,不接受其它系统消息的发布处理。
[0025] 这样可以保证生成的系统消息的序列标识是连续自增的。
[0026] 可选地,所述服务器将系统消息未读数发送给所述终端后,还包括:
[0027] 所述服务器记录发送给所述终端的系统消息的最大的序列标识。本实施例的方法记录终端已获取的系统消息未读数,可以方便下次计算系统消息未读数。
[0028] 可选地,所述服务器记录发送给所述终端的系统消息的最大的序列标识后,还包括:
[0029] 所述服务器接收到所述终端的获取未读系统消息的请求后,将当前最新系统消息的序列标识与所述发送给所述终端的系统消息的最大的序列标识之间的系统消息发送给所述终端,并记录所述当前最新系统消息的序列标识。
[0030] 本实施例的方法仅将当前与终端上次获取的系统消息时之间的发布的系统消息发送给终端,这样可以避免重复向终端重复发送系统消息。
[0031] 可选地,所述处理方法还可以包括:
[0032] 所述服务器定时检查所述终端的登录时间,确定所述终端最后的登录时间距检查时超过指定时间时,将缓存的距检查时超过所述指定时间的、对应用户获取过的系统消息的序列标识删除。
[0033] 本实施例的方法删除不活跃终端超过指定时期的系统消息的序列标识的存储,以节省存储空间。
[0034] 可选地,所述处理方法还可以包括:
[0035] 接收到所述终端的登录请求后,将距所述终端登录时指定时间内的发布的系统消息的消息数信息发送给所述终端。
[0036] 本实施例的方法仅向不活跃的客户端发送一定时期内的系统消息,这样可以减少服务器的负担。
[0037] 综上,本发明实施例提供一种系统消息的处理方法和服务器,能够明显减轻服务器处理系统消息的压力。附图说明
[0038] 附图用来提供对本发明技术方案的进一步理解,并且构成说明书的一部分,与本申请的实施例一起用于解释本发明的技术方案,并不构成对本发明技术方案的限制。
[0039] 图1为实现本发明各个实施例的一个可选的服务器的硬件结构示意图;
[0040] 图2为本发明实施例的一种系统消息的处理方法的流程图
[0041] 图3为本发明实施例的服务器的示意图;
[0042] 图4为本发明实施例一的流程图;
[0043] 图5为本发明实施例二的流程图;
[0044] 图6为本发明实施例三的流程图。
[0045] 本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

[0046] 应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0047] 图1为实现本发明各个实施例的一个可选的服务器的硬件结构示意图。
[0048] 服务器100可以包括无线通讯单元110、存储器120、控制器130和电源单元140等等;所述无线通讯单元110、存储器120、控制器130和电源单元140均通过总线150连接。图1示出了具有各种组件的服务器,但是应理解的是,并不要求实施所有示出的组件,可以替代地实施更多或更少的组件,将在下面详细描述服务器的元件。
[0049] 无线通讯单元110通常包括一个或多个组件,其允许服务器100与终端或网络中其他服务器之间的无线电通讯。无线通讯单元110用于服务器与外部的电子设备之间的通信。
[0050] 存储器120可以存储由控制器130执行的处理和控制操作的软件程序等等,或者可以暂时地存储己经输出或将要输出的数据(例如,用户信息等等)。存储器120可以包括至少一种类型的存储介质,所述存储介质包括闪存、硬盘、卡型存储器(例如,SD或DX存储器等等)、随机访问存储器(RAM)、静态随机访问存储器(SRAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、可编程只读存储器(PROM)、磁性存储器、磁盘、光盘等等。而且,服务器100可以与通过网络连接执行存储器120的存储功能的网络存储装置协作。
[0051] 控制器130通常控制服务器的总体操作。电源单元140在控制器130的控制下接收外部电力或内部电力并且提供操作各元件和组件所需的适当的电力。
[0052] 这里需要说明的是,图1所示的服务器100是采用总线(Bus)结构的,对于本领域的技术人员来说,服务器还可以采用其他的结构,只要电源单元140可以为各元件和组件提供操作所需的适当的电力,控制器130能够控制无线通讯单元110与外部的电子设备进行通信,而存储器120用于存储控制器130可执行的程序代码等对象即可,可见,本发明实施例并不对服务器做出更多限定。
[0053] 这里描述的各种实施方式可以以使用例如计算机软件、硬件或其任何组合的计算机可读介质来实施。对于硬件实施,这里描述的实施方式可以通过使用特定用途集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理装置(DSPD)、可编程逻辑装置(PLD)、现场可编程阵列(FPGA)、处理器、控制器、微控制器微处理器、被设计为执行这里描述的功能的电子单元中的至少一种来实施,在一些情况下,这样的实施方式可以在控制器130中实施。对于软件实施,诸如过程或功能的实施方式可以与允许执行至少一种功能或操作的单独的软件模块来实施。软件代码可以由以任何适当的编程语言编写的软件应用程序(或程序)来实施,软件代码可以存储在存储器120中并且由控制器130执行。
[0054] 基于上述服务器硬件结构以及通讯系统,提出本发明方法各个实施例。
[0055] 图2为本发明实施例的一种系统消息的处理方法的流程图,如图2所示,本实施例的方法包括:
[0056] 步骤11、服务器发布系统消息时,以自增连续的方式为所述系统消息生成一序列标识;
[0057] 步骤12、所述服务器接收到终端的获取系统消息未读数的请求后,将指定时期内的系统消息的总数作为系统消息未读数发送给首次请求获取系统消息未读数的终端,或者将当前最新发布的系统消息的序列标识与对应用户上次已读的系统消息的序列标识的差值作为系统消息未读数发送给所述终端。
[0058] 本实施例的方法通过连续的id,在计算未读数的时候通过简单的id相减就可以得出用户的未读数,减少了服务器在处理未读系统消息的负担。
[0059] 在本发明的一个实施例中,所述服务器在发布一条所述系统消息的过程中,不接受其它系统消息的发布处理。即一个用户在操作的时候另外一个用户无法操作。
[0060] 本实施例的方法,利用系统通知和广播不需要高并发的特性,采用加的机制为系统消息生成自增id,加锁机制采用的是互斥锁,即一个用户在操作的时候另外一个用户无法操作,直到这个用户操作完才会释放锁,这时候另外一个用户才能操作,这种机制保证了生成的id是唯一而且连续的。由于系统通知和广播一般一天就发几条,没有什么高并发操作,采用这种机制并不会对系统性能造成影响。
[0061] 在本发明的一个实施例中,所述服务器将系统消息未读数发送给所述终端后,还包括:所述服务器记录发送给所述终端的系统消息的最大的序列标识。即记录终端已获取的系统消息未读数,可以方便下次计算系统消息未读数。
[0062] 在本发明的一个实施例中,所述服务器记录发送给所述终端的系统消息的最大的序列标识后,还包括:
[0063] 所述服务器接收到所述终端的获取未读系统消息的请求后,将当前最新系统消息的序列标识与所述发送给所述终端的系统消息的最大的序列标识之间的系统消息发送给所述终端,并记录所述当前最新系统消息的序列标识。本实施例仅将当前与终端上次获取的系统消息时之间的发布的系统消息发送给终端,这样可以避免重复向终端重复发送系统消息。
[0064] 在本发明的一个实施例中,本实施例的方法还包括:
[0065] 所述服务器定时检查所述终端的登录时间,确定所述终端最后的登录时间距检查时超过指定时间时,将缓存的距检查时超过所述指定时间的、对应用户获取过的系统消息的序列标识删除。这样可以节省存储空间。
[0066] 在本发明的一个实施例中,本实施例的方法还包括:
[0067] 接收到所述终端的登录请求后,将距所述终端登录时指定时间内的发布的系统消息的消息数信息发送给所述终端。本实施例的方法仅向不活跃的客户端发送一定时期内的系统消息,这样可以减少服务器的负担。
[0068] 如果将用户的未读的限定标识(id)存储在客户端,然后再传递到服务器端进行处理,看起来似乎可行,但是用户一旦卸载该APP或者在另外一台手机上登录,所有的已读信息又会变成未读信息,造成极差的用户体验。
[0069] 如果将用户未读的限定id存储在服务器端,又会浪费大量的存储空间,因为互联网用户,沉默用户占比超过一半,相当于要为这一半的用户浪费存储空间。
[0070] 本实施例的方法只存储活跃用户的未读标志id,如果用户超过指定时间(例如一个月)不再登录,就删除该用户的未读标志,节省存储空间。当该用户再次上线的时候只为他展现一个月内未读数据。
[0071] 图3为本发明实施例的服务器的示意图,如图3所示,本实施例的服务器400包括:
[0072] 生成模块401,用于发布系统消息时,以自增连续的方式为所述系统消息生成一序列标识;
[0073] 传输模块402,用于接收到终端的获取系统消息未读数的请求后,将指定时期内的系统消息的总数作为系统消息未读数发送给首次请求获取系统消息未读数的终端,或者将当前最新发布的系统消息的序列标识与对应用户上次已读的系统消息的序列标识的差值作为系统消息未读数发送给所述终端。
[0074] 本实施例的服务器400通过连续的id,在计算未读数的时候通过简单的id相减就可以得出用户的未读数,减少了服务器400在处理未读系统消息的负担。
[0075] 在本发明的一个实施例中,服务器400还可以包括:
[0076] 记录模块403,用于记录发送给所述终端的系统消息的最大的序列标识。
[0077] 本实施例的服务器400记录终端已获取的系统消息未读数,可以方便下次计算系统消息未读数。
[0078] 可选地,传输模块402,还用于接收到所述终端的获取未读系统消息的请求后,将当前最新系统消息的序列标识与所述发送给所述终端的系统消息的最大的序列标识之间的系统消息发送给所述终端;
[0079] 记录模块403,还用于记录所述当前最新系统消息的序列标识。
[0080] 本实施例的服务器400仅将当前与终端上次获取的系统消息时之间的发布的系统消息发送给终端,这样可以避免重复向终端重复发送系统消息。
[0081] 在本发明的一个实施例中,服务器400还包括:检查模块404和删除模块405,[0082] 检查模块404,用于定时检查所述终端的登录时间,确定所述终端最后的登录时间距检查时超过指定时间时,通知删除模块405;
[0083] 删除模块405,用于将缓存的距检查时超过所述指定时间的、对应用户获取过的系统消息的序列标识删除。
[0084] 本实施例的服务器删除不活跃终端超过指定时期的系统消息的序列标识的存储,以节省存储空间。
[0085] 在本发明的一个实施例中,传输模块402,还可用于接收到所述终端的登录请求后,将距所述终端登录时指定时间内的发布的系统消息的消息数信息发送给所述终端。
[0086] 本实施例的服务器仅向不活跃的客户端发送一定时期内的系统消息,这样可以减少服务器的负担。
[0087] 应理解,图3所示的各模块可置于图1所示的服务器的控制器130中,以实现相应的功能。
[0088] 以下以几个实施例对本申请的方法进行详细说明。
[0089] 实施例一
[0090] 本实施例为客户端首次获取系统消息未读信息,如图4所示,包括以下步骤:
[0091] 步骤1001,服务器400发布系统消息时,以自增连续的方式为所述系统消息生成一序列标识;
[0092] 服务器400发布系统消息的时候,标识生成器为该系统消息生成一个唯一的自增连续的序列标识(id)(例如,系统消息的序列id为1,2,3,4,5)。
[0093] 服务器400记录消息的同时,并将当前最大的系统消息的序列id记录到缓存中。
[0094] 步骤1002,客户端首次向服务器400获取系统消息未读数;
[0095] 步骤1003,服务器400接收到请求后,将指定时期内的系统消息的总数发送给客户端。
[0096] 服务器400获取指定时期(例如一个月)内的消息总数返回给客户端。服务器400将会记录用户此次刷新获取的id,将其记录在缓存中。
[0097] 步骤1004,用户向服务器400获取系统消息未读列表。
[0098] 用户在客户端上看到有未读计数,点击查看未读计数。
[0099] 步骤1005,服务器400将用户未读的系统消息数据发送给客户端。
[0100] 服务器400将用户最后查看的系统消息的序列id到最新发布的系统消息的序列id之间的消息数据输出给客户端,并重新记录用户最后读取的系统消息的系统id。
[0101] 实施例二
[0102] 本实施例为客户端非首次获取系统消息未读信息,如图5所示,包括以下步骤:
[0103] 步骤2001,服务器400发布系统消息时,以自增连续的方式为所述系统消息生成一序列标识;
[0104] 服务器400发布系统消息的时候,标识生成器为该系统消息生成一个唯一的自增连续的序列标识(id)(例如,系统消息的序列id为1,2,3,4,5)。
[0105] 服务器400记录消息的同时,并将当前最大的系统消息的序列id记录到缓存中。
[0106] 步骤2002,客户端后续向服务器400获取系统消息未读数。
[0107] 步骤2003,服务器400接收到请求后,将当前最新发布的系统消息的序列标识与对应用户上次已读的系统消息的序列标识的差值作为系统消息未读数发送给客户端。
[0108] 客户端每隔五分钟向服务器400获取最新的更新数,服务器400获取到客户端身份的时候在缓存中查找上次对应用户查看的id,将系统消息最大(即最新)的id和用户最后查看的id相减,即可知道用户未读数。
[0109] 如:消息最新id–用户最后已读id=未读数。
[0110] 通过偏移量计算可以准确的计算出用户的未读数,整个过程只是纯粹的减法运算,服务器吞吐能力很强。
[0111] 步骤2004,用户向服务器400获取系统消息未读列表。
[0112] 用户在客户端上看到有未读计数,点击查看未读计数。
[0113] 步骤2005,服务器400将用户未读的系统消息数据发送给客户端。
[0114] 服务器400将用户最后查看的系统消息的序列id到最新发布的系统消息的序列id之间的消息数据输出给客户端,并重新记录用户最后读取的系统消息的系统id。
[0115] 实施例三
[0116] 本实施例中,服务器400删除不活跃用户的已读的系统消息的序列id。如图6所示,包括以下步骤:
[0117] 步骤3001、服务器400定时检查用户的登录时间;
[0118] 步骤3002、服务器400判断用户最后登录时间与当前对比是否超过指定时间,如不超过,则不作处理;如超过,则转步骤2002;
[0119] 步骤3003、服务器400删除该用户最后查看的系统消息的序列id;
[0120] 例如,服务器400每天启动一个定时任务检查用户最后登录时间与当前对比是否超过指定时间(例如30天),如果超过30天则删除该用户最后查看系统消息的序列id的存储,以减少服务器400的资源被占用。
[0121] 步骤3004、服务器400检测到所述用户再次上线时,向客户端发送距当前指定时间内发布的系统消息的未读数信息;
[0122] 如果该用户再次上线,因为该用户不活跃已经超过30天,只为该用户展现30天内的系统消息,通过计算该用户当前上线时间,再计算该上线时间30天前的时间,获取这两个时间差之间的系统消息数据按id倒序排列返回给客户端。
[0123] 步骤3005,用户向服务器400获取系统消息未读列表。
[0124] 用户在客户端上看到有未读计数,点击查看未读计数。
[0125] 步骤3006,服务器400将用户未读的系统消息数据发送给客户端。
[0126] 服务器400将用户最后查看的系统消息的序列id到最新发布的系统消息的序列id之间的消息数据输出给客户端,并重新记录用户最后读取的系统消息的系统id。
[0127] 需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者装置不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者装置所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、方法、物品或者装置中还存在另外的相同要素。
[0128] 上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
[0129] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,空调器,或者网络设备等)执行本发明各个实施例所述的方法。
[0130] 以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
QQ群二维码
意见反馈