CN109361591A - 一种基于插件化的个人消息聚合系统 - Google Patents
一种基于插件化的个人消息聚合系统 Download PDFInfo
- Publication number
- CN109361591A CN109361591A CN201810840635.0A CN201810840635A CN109361591A CN 109361591 A CN109361591 A CN 109361591A CN 201810840635 A CN201810840635 A CN 201810840635A CN 109361591 A CN109361591 A CN 109361591A
- Authority
- CN
- China
- Prior art keywords
- message
- module
- plug
- unit
- queue
- 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.)
- Granted
Links
- 238000004458 analytical method Methods 0.000 claims abstract description 43
- 238000001914 filtration Methods 0.000 claims description 19
- 238000006116 polymerization reaction Methods 0.000 claims description 11
- 238000000605 extraction Methods 0.000 claims description 9
- 238000009826 distribution Methods 0.000 claims description 7
- 238000013016 damping Methods 0.000 claims description 5
- 238000000034 method Methods 0.000 abstract description 34
- 230000011218 segmentation Effects 0.000 abstract description 4
- 239000000284 extract Substances 0.000 abstract description 3
- 230000006870 function Effects 0.000 description 22
- 230000008569 process Effects 0.000 description 13
- 238000004891 communication Methods 0.000 description 11
- 238000012545 processing Methods 0.000 description 11
- 238000013461 design Methods 0.000 description 7
- 238000005538 encapsulation Methods 0.000 description 7
- 230000000875 corresponding effect Effects 0.000 description 6
- 238000003860 storage Methods 0.000 description 6
- 241001269238 Data Species 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 4
- 238000009877 rendering Methods 0.000 description 3
- 238000012216 screening Methods 0.000 description 3
- 238000005033 Fourier transform infrared spectroscopy Methods 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000000903 blocking effect Effects 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000018109 developmental process Effects 0.000 description 2
- 238000011065 in-situ storage Methods 0.000 description 2
- 238000002955 isolation Methods 0.000 description 2
- 238000006424 Flood reaction Methods 0.000 description 1
- 244000097202 Rathbunia alamosensis Species 0.000 description 1
- 235000009776 Rathbunia alamosensis Nutrition 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 230000000739 chaotic effect Effects 0.000 description 1
- 230000001276 controlling effect Effects 0.000 description 1
- 238000012679 convergent method Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 238000006731 degradation reaction Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000007373 indentation Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000002372 labelling Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000000644 propagated effect Effects 0.000 description 1
- 230000001105 regulatory effect Effects 0.000 description 1
- 238000012552 review Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000033772 system development Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/04—Real-time or near real-time messaging, e.g. instant messaging [IM]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/21—Monitoring or handling of messages
- H04L51/212—Monitoring or handling of messages using filtering or selective blocking
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明提供一种基于插件化的个人消息聚合系统及方法,其中系统包括显示模块,还包括以下模块:用于登录到消息源,并从所述消息源获取和/或格式化消息的来源模块;用于分析获取到的所述消息的控制中心;用于将分析后的消息推送给用户的事件模块。按照本发明提出的基于插件化的个人消息聚合系统及方法,有限度地整合来自不同聊天软件的消息,并自动提取出有效的信息,帮助使用者提高消息获取的效率,通过中文分词技术,对消息进行处理,过滤出需要的消息和其他人直接与你对话的消息,并将它们反复显示出来,有效的降低了信息量,可以让使用者专注于自己想要做的事情上。
Description
技术领域
本发明涉及医疗设备技术的技术领域,特别是一种基于插件化的个人消息聚合系统。
背景技术
如今网络改变着我们的生活,在生活和工作中越来越多的人使用即时聊天工具,学校的通知、公司的消息也都经过即时聊天工具传播,同时各种兴趣群组也夹杂在其中。这使得消息的管理十分的混乱和无序。同时也由于学校和公司群并不是时时刻刻都有与自己相关的消息,很多时候群内也只是在闲聊,这就让我们遇到了一个问题,那就是到底要不要对这样的群组静音,如果静音的话很可能接收不到紧急的开会或者通知消息,而不静音的话又会因为杂乱的消息影响自己的工作。以往只能通过创建多个账号有限度的隔离相关的群组,但这导致切换账号十分的繁琐,同时也无法解决可能含有重要消息的群组在闲聊时的消息轰炸。
目前有以下程序实现了聚合:1)Zaker,Zaker是一个致力于新闻聚合的平台,这虽然是一种聚合,但明显不是为了个人即时通讯消息而设计的,是聚合国内cnBeta、新浪微博等网络服务的聚合阅读程序。并不能真正的为使用者过滤相关的内容,这也就无法达成本设计所需要的结果;2)BlinkFeed,BlinkFeed是一个在HTC手机上的消息聚合工具,它虽然是对用户个人聊天消息的聚合但其未提供过滤的功能,而且这个工具仅能在HTC手机上工作,同时所支持的软件较少;,明显不能满足用户的需要;3)EH Forwarder Bot,EHForwarder Bot在微信和Telegram之间建立了转发模式,但其没有过滤功能,虽然EHForwarder Bot设计上可以接入其他即时通讯系统中,但目前并没有实现,现在其只能用于微信消息的转发,实现了多个聊天软件之间的内容互通,但是它也没有实现相关的过滤功能,无法让用户只关注重要的事情,它仅可以让用户少依赖一个软件来提高效率。
发明内容
为了解决上述的技术问题,本发明提出一种基于插件化的个人消息聚合系统及方法,有限度的整合来自不同聊天软件的消息,并自动提取出有效的信息,帮助使用者提高消息获取的效率,通过中文分词技术,对消息进行处理,过滤出需要的消息和其他人直接与你对话的消息,并将它们反复显示出来,有效的降低了信息量,可以让使用者专注于自己想要做的事情上。
本发明第一目的是提供一种基于插件化的个人消息聚合系统,包括显示模块,还包括以下模块:
来源模块:用于登录到消息源,并从所述消息源获取和/或格式化消息;
控制中心:用于分析获取到的所述消息;
事件模块:用于将分析后的消息推送给用户。
优选的是,当所述来源模块连接到消息队列后向所述控制中心发送就绪指令。
在上述任一方案中优选的是,所述消息使用JSON格式进行传输。
在上述任一方案中优选的是,所述控制中心包括消息路由、分析模块、过滤模块和存储模块中的至少一种。
在上述任一方案中优选的是,所述消息路由通过Source队列、Analysis队列、Reply队列、Push队列和Callback队列中的至少一种进行消息分发。
在上述任一方案中优选的是,所述分析模块使用通过关键词提取算法提取消息中的关键词,公式为:
其中,d为阻尼参数代表每次迭代后的损耗概率,Vj为句子中每一词组的相似度向量。
在上述任一方案中优选的是,所述过滤模块用于检索消息并去除无用的部分。
在上述任一方案中优选的是,所述过滤模块通过聊天模式和正则设定判断消息是否推送。
在上述任一方案中优选的是,当聊天模式为私聊时,则消息必定被推送。
在上述任一方案中优选的是,当聊天模式为群组聊天时,所述过滤模块使用正则表达式来进行条件匹配。
在上述任一方案中优选的是,所述存储模块用于直接保存来自来源的消息同时提供消息回溯。
本发明第一目的是提供一种基于插件化的个人消息聚合方法,包括显示聚合后的信息,还包括以下步骤:
登录到消息源,并从所述消息源获取和/或格式化消息;
分析获取到的所述消息;
将分析后的消息推送给用户。
优选的是,当来源模块连接到消息队列后向控制中心发送就绪指令。
在上述任一方案中优选的是,所述消息使用JSON格式进行传输。
在上述任一方案中优选的是,所述控制中心包括消息路由、分析模块、过滤模块和存储模块中的至少一种。
在上述任一方案中优选的是,所述消息路由通过Source队列、Analysis队列、Reply队列、Push队列和Callback队列中的至少一种进行消息分发。
在上述任一方案中优选的是,所述分析获取到的所述消息的步骤包括用通过关键词提取算法提取消息中的关键词,公式为:
其中,d为阻尼参数代表每次迭代后的损耗概率,Vj为句子中每一词组的相似度向量。
在上述任一方案中优选的是,所述过滤模块用于检索消息并去除无用的部分。
在上述任一方案中优选的是,所述过滤模块通过聊天模式和正则设定判断消息是否推送。
在上述任一方案中优选的是,当聊天模式为私聊时,则消息必定被推送。
在上述任一方案中优选的是,当聊天模式为群组聊天时,所述过滤模块使用正则表达式来进行条件匹配。
在上述任一方案中优选的是,所述存储模块用于直接保存来自来源的消息同时提供消息回溯。
本发明提出了一种基于插件化的个人消息聚合系统及方法,在使用中尽可能地为用户提供一个快速上手的消息过滤和发现机制,让用户从繁杂无用的数据中脱离,仅需要专注于与自己有关的相关消息,提高工作效率的同时降低遗漏消息的概率,让用户不被非相关消息流淹没。
附图说明
图1为按照本发明的基于插件化的个人消息聚合系统的一优选实施例的结构图。
图2为按照本发明的基于插件化的个人消息聚合方法的一优选实施例的的流程图。
图3为按照本发明的基于插件化的个人消息聚合系统的另一优选实施例的系统抽象结构图。
图4为按照本发明的基于插件化的个人消息聚合系统的如图3所示实施例的功能模块图。
图5为按照本发明的基于插件化的个人消息聚合系统的如图3所示实施例的程序结构图。
图6为按照本发明的基于插件化的个人消息聚合系统的非托管独立连接的一实施例的自动协商过程图。
图7为按照本发明的基于插件化的个人消息聚合系统的如图6所示实施例的消息路由工作流程图。
图8为按照本发明的基于插件化的个人消息聚合系统的再一优选实施例的消息流速折线图。
具体实施方式
下面结合附图和具体的实施例对本发明做进一步的阐述。
实施例一
如图1、2所示,执行步骤200,来源模块100登录到消息源,并从所述消息源获取和/或格式化消息。当来源模块100连接到消息队列后向控制中心110发送就绪指令,控制中心110接收后将向其发送获取基础信息的指令以获得来源模块的基础数据,数据包括来源名称和来源用户。来源模块100连接后即可开始推送,推送信息将使用JSOM格式进行传输,所有消息均包含:来源消息模块、消息体、消息子分组、消息子分组中发送者用户名和登录用户;消息回复则包括来源模块名称、消息子分组名和消息体。如果来源模块所监听的聊天协议发生掉线,则应尝试重连1次,如果再次失败则停止重连并发送离线信息到消息队列,前端面板将会提示用户有来源发生了离线。
11.执行步骤210,控制中心110分析获取到的所述消息。用通过关键词提取算法提取消息中的关键词,公式为:
其中,d为阻尼参数代表每次迭代后的损耗概率,Vj为句子中每一词组的相似度向量。
消息路由111通过Source队列、Analysis队列、Reply队列、Push队列和Callback队列中的至少一种进行消息分发。Source队列用于处理从来源模块接收到的信息是一个公有队列,并进行消息的预处理,调用消息存储模块并生成消息ID,然后由消息路由模块接收这个队列中的消息并将它们传输到消息存档模块和消息过滤模块中,同时将消息去除无用或某些敏感数据后将消息推入Analysis队列中。Analysis队列中为消息分析插件接入的队列是一个公有队列,分析模块通过接入这个队列获得待分析的数据并无需在分析结束后进行回报。Reply队列中为回复的消息运行于公有队列模式,这个队列由各来源模块监听并采取对应的行动。Push队列是一个公有队列用于处理消息的推送。本步骤还包括检索消息并去除无用的部分和通过聊天模式和正则设定判断消息是否推送,当聊天模式为私聊时,则消息必定被推送;当聊天模式为群组聊天时,所述过滤模块使用正则表达式来进行条件匹配。
执行步骤220,事件模块120将分析后的消息推送给用户。执行步骤230,显示模块130显示聚合后的消息。
实施例二
本实施例展示了一种基于插件化的个人信息聚合系统。系统抽象结构图如图3所示,首先需要部署RabbitMQ和MongoDB,启动RabbitMQ然后创建不同的消息队列。启动控制中心模块,控制中心模块会自动检索所有需要启动的模块然后将他们启动。这里的所有启动都是由控制中心模块控制启动的进程级程序。并对控制中心提供接口。控制中心启动完毕后开启对外接口,正式开始提供服务。然后使用Nginx直接负载静态的CSS、HTML、KotlinJS语言,最终用户通过浏览器操作整个系统。
整体系统的设计基于插件化低耦合的结构,整个系统所有模块都是独立运行耦合的结构,整个系统所有模块都是独立运行这个模式的主要流程:
消息队列服务启动,控制中心然后由各个核心模块和分析消息队列服务启动,控制中心然后由各个核心模块和分析消息队列服务启动,控制中心然后由各个核心模块和分析模块,等待来源模块连接。来源模块独立启动后通知控制中心进行注册,并开始推送。用户打开网站,WebSocket连接并访问由控制中心提供的接口。浏览器内连接并访问由控制中心提供的接口。。浏览器内的ef.js实现模板与逻辑的分离,在接收消息后进行后台渲染,并在适时进行挂载。
由于插件化个人消息聚合系统是基于个人的消息,所以这是一个单用户系统,主模块结构如图4所示。
本系统就是以插件式的设计解决连接多个第三方系统时的兼容问题,同时对整个消息处理流程使用插件式设计进行解耦合,以此降低系统复杂度并提供可扩展的系统功能。
在本系统中插件式系统被用于多个部分,包括来源插件、消息处理插件、分析插件等。插件管理器本身以进程信号量来标记进程状态,通过非零返回值和零返回值来确定插件运行状态,以区分插件当前是处于运行状态或是错误崩溃状态,还是正常退出状态。当插件处于错误崩溃状态时提供自动现场恢复的功能,以重新启动插件。程序结构如图5所示。
消息路由
本系统使用RabbitMQ作为消息队列控制器,使用Protocol Router库作为消息分发机制,在本系统中使用5个子队列进行消息分发,分别为Source队列、Analysis队列和Reply队列、Push队列、Callback队列。
Source队列用于处理从来源模块接收到的信息是一个公有队列,并进行消息的预处理,调用消息存储模块并生成消息ID,然后由消息路由模块接收这个队列中的消息并将它们传输到消息存档模块和消息过滤模块中,同时将消息去除无用或某些敏感数据后将消息推入Analysis队列中。
Analysis队列中为消息分析插件接入的队列是一个公有队列,分析模块通过接入这个队列获得待分析的数据并无需在分析结束后进行回报。
Reply队列中为回复的消息运行于公有队列模式,这个队列由各来源模块监听并采取对应的行动。
Push队列是一个公有队列用于处理消息的推送。
消息路由模块中,Cli类提供了手动在线更新模块的方式,这样消息路由模块无需离线即可更新所有模块定义。
Income和Outbound则定义了消息输入和输出的路径并通过Main启动运行轻量的消息路由程序。消息路由模块中,Cli类提供了手动在线更新模块的方式,这样消息路由模块无需离线即可更新所有模块定义。
Income和Outbound则定义了消息输入和输出的路径并通过Main启动运行轻量的消息路由程序。
来源模块
由于某些聊天软件的通讯协议并不公开,所以本系统在有官方支持中由于某些聊天软件的通讯协议并不公开,所以本系统在有官方支持中使用官方协议,而在不受直接支持的通讯中采用第三方的通信协议封装。
模块连接至消息队列后发出就绪指令,控制中心收将向其送获取基础信息模块连接至消息队列后发出就绪指令,控制中心收将向其发送获取基础信息的指令以获得来源模块的基础数据,数据包括以下内容:来源名称和来源用户。
来源模块连接后即可开始推送。
如果来源模块所监听的聊天协议发生掉线,则应尝试重连1次,如果再次失败则停止重连并发送离线信息到消息队列,前端面板将会提示用户有来源发生了离线。
所有消息将使用JSON格式进行传输,所有消息均包含以下部分:来源模块名称、消息体、消息子分组、消息子分组中发送者用户名和登录用户。
消息回复则包含以下部分:来源模块名、消息子分组名和消息体。
前端界面
前端界面采用ef.js与pagejs配合的方式实现,无刷新切换界面并使用WebSocket通信以降低长连接下的通讯开销,并防止过多的长连接连接到服务器造成服务器堵塞,同时提供基于sockjs的降级解决方案来配合在不支持WebSocket的浏览器和终端上使用轮询长连接来模拟WebSocket连接。
前端面板直接与消息队列服务器相连,并使用一个特有的用户名和密码进行登录,这个消息队列用户没有修改消息队列的权限,只存取自身消息队列的权限。
同时前端界面的控制程序会自动为每个面板连接启动一个全文检索引擎的待机,以确保多个检索可以只读的同时进行,让搜索结果互不影响。同时检索队列也由分析插件同时监听,以提供不同分析插件的功能可视化展示,让面板可以真正的直接从各个模块中获取所需的数据。
控制中心
控制中心是整个系统的核心区域,它负责启动全文检索引擎、分析插件、过滤插件、调控消息队列的信息流。
在启动时,控制中心先连接到消息队列并开始监听消息,然后启动全文检索引擎和分析插件。当任何消息到达时自动地根据消息的来源和内容进行回复或转发。
当消息是来源插件连接时,控制中心会发出来源插件信息询问,来获得相关插件的基础信息。当基础信息到达时,则会继续询问登录状态并相应的更新相关数据项。之后的消息到达时,则将其分发给全文检索引擎和分析插件。而当插件离线或者登录状态变更时自动询问重新登录或重新初始化插件连接。同时启动前端界面服务器,在前端连接时自动创建对应的全文检索服务并等待密码相关信息,之后整个系统会进入推送通道模式,所有经过过滤后的消息会被以粘性方式推送到面板上进行显示,以保证这条数据被用户所正常的接收和处理,当用户进行相关处理后,面板会主动地从消息队列中删除对应的消息,以保证消息不被再一次推送到其他正在连接的面板上,同时由于消息从消息队列中删除,其他在线面板也会同步这个数据的相关状态,保证面板中推送显示的唯一性。
由于本系统是给用户个人使用,所以仅以预定义的密码进行保护,这时面板的安全性不足,所以本系统同时支持一次性密钥的两步认证方式,支持手机时间基础一次性密码和基于硬件设备的符合FIDO标准的一次性密码生成设备。在面板首次登录的时候将会由控制中心通知面板显示对应的设置界面以增强面板的安全性,用户进行设置后才能正式进入面板
关键词提取模块
在本系统中,算法方面主要集中于分析模块和过滤模块中。
在分析模块中,本系统采用HanLP汉语言处理包的NLP自然语言识别算法,在对比N-最短路分词和词典分词后,使用NLP分词的效率虽然比词典分词稍低,但准确度比词典分词高很多,而N-最短路分词的准确度与NLP分词相比稍低,但时间消耗不分上下,同时NLP分词提供词性解析功能,可以在分析句内信息时提供更多的数据,让时间和日期相关的信息发现更加准确。
同时,HanLP还提供有关键词提取算法,这种算法内部使用TextRank算法进行匹配。而TextRank算法使用PageRank计算公式计算单词权重,并让单词间进行投票,最终使用矩阵迭代收敛的方法求出一个词语的权重,权重高的前N个词语作为整句话的关键词。
PageRank公式如下:
式中:d为阻尼参数,代表每次迭代后的损耗概率,一般设置为0.85。Vj为句子中每一词组的相似度向量,反复迭代投票直至收敛得到目标词语。
而在过滤模块中,主要使用正则表达式来进行条件匹配,与其他方案相比,正则表达式虽然书写起来较为繁琐,但其可以提供单正则表达式匹配多种内容的模式,这样可以降低文字段的扫描次数,让整个过滤系统以更高的效率运行。
实施例三
本实施例主要阐述了基于插件化的个人消息聚合系统的具体实现方式。
插件化系统
本系统使用插件化模式开发,插件化采用消息队列和消息路由模块相结合的方式,由消息队列负责分发所有消息数据,由消息路由模块负责把消息发送给所有动态注册的分析模块中以保证分析模块无需获得消息队列的权限即可访问消息,以此来隔离可能的恶意模块对整个消息系统的窃取。这个安全机制可以保护用户的消息不被完全获取,但由于本系统本身就是一个对用户个人消息的聚合系统,所以这只能有限度的保证消息的隐私属性。
同时插件化系统也为整个消息流程提供的解耦合的通讯方式,这使得每一个子模块的错误不会扩散到整个系统中,最终崩溃整个系统。这种进程和线程处理的隔离方式为整个系统提供的稳定的支持。
在这个插件化系统中,唯一可能发生单点故障的地方是消息队列和消息路由,但本系统允许部署采用多队列互备的方式提高消息队列的稳定性和可到达率,而消息路由则因为涉及插件注册,无法使用互备的方案,但通过本系统,可以使消息路由组件在被重新启动时“回顾”其落后的消息,而这个过程无需插件的特殊支持,消息路由组件会自动的进行现场恢复,然后重新向分析插件推送崩溃后发送的信息,这样分析插件就可以无痛的继续分析。而这一切数据则源自于消息记录模块的数据库记录。
而整个数据库记录也允许使用MongoDB复制区进行多机备份,在有3个数据库复制区的情况下,只要还有任何一个复制区没有掉线,所有的模块均可以正常使用,当离线的数据库管理器重新上线后,他们会遵循MongoDB复制区算法自动同步其落下的数据,以保证数据可用性。
这就使整个系统以互相分离的插件化模式运行,提高可用性的同时也会降低代码复杂度,让模块的问题更加容易地被发现。
共用库实现
整个系统被设计为尽可能的重用组件,因为复用组件可以减少开发和维护成本,无需在多个模块中重新开发相似功能的模块,仅需要简单的引入复用的组件库即可,设计并重用了如下组件用以降低系统开发中的重复代码数量。在这种设计中,所有组件均被打包为类库,可以被任何模块,甚至被其它系统复用。
SockerChannel
TCP/UDP管理库,该库使用Java NIO非阻塞实现,该库分为2种模式,托管模式和非托管模式。
托管模式
TCP和UDP数据包采用如表1所示的数据包结构传输。
数据头 | 数据体 |
1bit | n bit |
表1
当发送数据时,头被设置为1,数据体部分为数据的字节。当需要创建一条独立的非托管连接时,分为两种情况:
(1)连接请求由服务端发起
□在随机端口创建一个ServerSocket
□获取随机端口号
□发送通讯数据包,头设置为1,数据体为端口号
□等待客户端连接到端口
□1个连接被建立时关闭ServerSocket
□非托管连接被成功建立
(2)连接请求由客户端发起
□头被设置为1,数据体为空
□服务端收到后执行与由服务端发起时相同的操作建立连接非托管独立连接请求通讯建立机制。
非托管模式
如图6所示,在托管模式下可以使用createUnmangedChannel创建多个非托管连接以进行额外的大量单实体数据的传输。
非托管模式下,数据包不含头字段,无法使用createUnmanagedChanne创建其他连接。
在非托管方式下,所有的数据都不含有头数据,所有数据将直接发送,这种模式下可以快捷的与使用了SocketChannel库以外的系统进行通讯。这时,所有的数据均需要由开发者自己进行解析,同时不推荐在这个模式下传输大数据,由于NIO仅会创建1个处理线程进行数据处理,所以当大数据在链路上传输时就会导致链路处理堵塞,其他连接处于长时间等待状态,这种状态下十分容易丢失数据。需要开发者谨慎使用这个模式。
需要注意的是,当创建时客户端和服务端必须同时使用托管或非托管模式,否则会导致通讯时发生使用托管模式的一段无法解析数据包,非托管模式的一端在每一次接收数据包时出现额外的数据,且发送后可能无法获得目的回复。
ProcotolRouter
消息分发库,该库通过注册模式注册数据来源和去向。本库使用Java NIO非阻塞模式实现。
该库仅需2个线程即可完成大量小数据的传输和路由,节约资源的同时也因为需切换子线程而节约了线程切换开销,使得处理速度更快。
来源插件注册时需要提供一个标识,之后,该库会返回一个非阻塞通道,向该通道写入数据即可将数据发送至库的中转模块上。
同时可以通过传入一个标识名,动态地移除一个来源,所有连接源均可在运行中进行热拔插而无需重启整个消息分发库的相关线程。
去向模块需要提供一个函数实现来接收数据,数据均为字节数组。所有去向插件都是在不同线程中处理的,每个去向模块得到的数据均为原数据的复制而不是数据本身。所有去向模块会在同一时刻被调用。
同样的,如果将相同的函数传入移除方法中,相关的去向注册也将被移除,也就是说去向处理也是动态可插拔的。
在模块启动时会初始化内部的表结构并启动一个通道选择器。
在使用者调用startUp后将启动一个独立的线程并请求选择器返回已就绪的通道实例,当有通道进入可读的状态后,从通道中读取数据并随同就绪的隧道名封装成一个数据集,调用所有注册的处理器并将这个数据集的副本传递给它们。
在这个库运行中,可以动态的调用register来将一个数据流注册到分发器上,或者调用addProctolFunction并提供一个回调方法让分发器在消息到达时触发并执行。
整个库采用Java NIO非阻塞方式运行,数据到达后将写入Sink通道,而Source通道将自动绑定到通道选择器上。而注册到分发器的消息处理器都将放置在一个内部映射中等待调用。
内部运行的线程将会收到这个通道就绪信息,并选择这个就绪的通道进行读取,读取后将隧道标签和数据压入RawDataBlock封装中,并从内部处理函数队列中取出所有处理函数并调用。
处理流程如图7所示,本库设计为一种消息循环的处理模式,它仅在整个程序被系统杀死时才会停止。否则将一直循环运行并在获取可读通道游标时阻塞等待。
WorldAnalytic
中文自然语言分析库,该库为HanLP和Lucene库的二次封装。
HanLP是一个中文分词引擎,用来对中文字符串进行分词。
在这个组件中默认使用NLP分词引擎以应对中文自然语言分词。
Lucene是一个全文搜索引擎,它接收HanLP的分词数据并将其索引,以在之后的使用中可以以非常快的速度进行全文检索。
在本模块中,索引使用NIODirectory进行保存,保证最大的读写速度。
在WordAnalytic的实现中,所有检索器需要单独进行实例化以区分各个存储区域。
实例化时指定一个存储位置,WordAnalytic库会使用这个存储位置通过NLP分词器初始化这个索引存储,之后可以通过向实例传入Lucene所支持的文档进行分词索引存储。当使用时仅需提供关键字即可返回匹配的数据组。
SameSentence
字符串分析库,该库有多个功能。该库部分基于HanLP封装。在本组件中使用标准分词器进行分词以达到最快的分词速度。
对外提供字符串相似度比例、关键词提取、短语提取、总结提取和分词的功能。
字符串相似度比例:用以分析对比两段字符串的相似度,并返回相似度比例。
关键词提取:这个功能由HanLP封装而来,可以快速提取一段文字中的关键词。
短语提取:这个功能由HanLP封装而来,可以快速提取一段文字中的短语。
总结提取:这个功能由HanLP封装而来,可以快速提取一段文字中的中心思想短语。
分词:这个功能由HanLP封装而来,获取未被处理的分词数据,可以用以进行其他分析。
Kefjs
Kefj是ef.js在Kotlin/JS上的绑定,通过这个绑定,将纯Javascript库转换为Kotlin/JS可以使用的状态,同时提供DSL的快速设置,让Kefjs可以更直观的进行配置,而底层渲染仍然交由ef.js本身进行处理,以达到最快的处理速度。
Kefjs同时也提供一些实验性的功能以增强Kefjs的功能,使用这些功能有可能导致系统发生某些不可预知的渲染问题,但在我的测试中,这种问题并未发生过。
通过扩展字符串方法快速创建模板并生成预配置的ef.js模板,在需要的时候直接实例化模板并传入一个DSL所书写的配置清单即可快速实例化并完成组件初始化。同时Kefjs层会独立地处理某些绑定信息,以兼容Kotlin式的初始化,通过重写各个操作符来简化调用并提供与Javascript版本ef.js几乎相同的调用方式以降低学习成本。在Kefjs层将会自动地处理绑定时发生的回调以匹配某些Kefjs特有的使用方式,如绑定时回调和数据保存恢复。
Kefjs同时定义了DSL领域特定语言来提供与原版相似的开发体验,通过DSLMarker定义专有的配置类,在绑定时自动解析并设定到实例上。Kefjs的DSL分为以下4层:
□Data数据层
□Methods方法层
□onMount挂载回调层
□Mount自动挂载层
当实例被实例化时数据层的内容会自动通过数据设定方法设置到模板中,以提供初始数据显示;方法层则在实例化时自动绑定到对应的方法上;自动挂载层则在实例化时可以挂载一个已有的实例来显示其内部内容;挂载回调层则是通过Kefjs本身的管理在当前实例被挂载到其他实例的挂载点时自动触发,以提供页面切换等时刻的数据重设置,以弥补原版挂载时的代码混乱。
实施例四
本实施例中介绍了本系统与微信互联的使用方法。
微信使用的是私有的通讯协议,借助第三方解码的部分使用wxpy进行连接,并连接到Source队列,然后监听Reply队列。
该来源模块连接到消息队列并发出连接请求后进行等待,当控制中心就绪后将会发出被动登录模式代码,返回二维码图片进行登录。
登录结束后,本模块会将所有的消息全部格式化并发送到消息队列并监听回复的消息队列中是否含有与本模块相关的回复数据,如果有则操作wxpy库发送到目的聊天中。
如果微信来源发生掉线,则直接发送离线消息以避免服务器封禁用户账户的网页微信登录权限,并将登录模式退回未登录的状态,让用户重新扫描二维码登录。
实施例五
本实施例中介绍了本系统与IRC互联的使用方法。
IRC协议则较为简单,使用主动登录模式进行登录,连接成功后等待控制中心发出主动登录命令,并直接连接目标服务器,然后通过NickServ进行登录操作。
本模块重连采取标准模式。
当连接时自动调用NickServ进行登录操作,当登录成功后自动加入不同的聊天组并监听聊天消息,当消息到达时将其转发至队列,并从队列中获得将要发送的消息推送将其发送至目的聊天组中。
由于IRC仅支持纯文本消息,非常纯粹,其更容易进行过滤。
实施例六
本实施例中介绍了基于插件化的个人消息聚合系统中的后端模块。包括过滤器模块、全文索引模块和管理模块。
过滤器模块
过滤器模块是一个后端模块,没有界面,它从消息队列接收所有消息并通过正则表达式进行匹配,一旦匹配出需要的内容就会向消息存档模块请求上下文并将其以粘性广播的方式推送到前端页面的相关位置,这样可以大幅度降低消息流速,让用户可以更加专注,消息流速如图8所示。
全文索引模块
全文索引模块基于Lucene底层库进行消息索引,并通过Java的Non-Blocking IO即NIO实现支持但进程和线程写入,多进程和线程读取的写安全、高速读取的全文检索引擎。
通过中文分词HanLP汉语言处理包进行自然语言分词,以提供较高的准确度。
管理模块
管理模块通过系统的父子树持有下级模块的进程句柄,并可以感知子进程的崩溃,当发生崩溃时,管理模块可以对子模块进行进程恢复和灾难重建。
同时,当一个模块反复崩溃时可以自动禁用它们避免它们过多的错误日志影响系统其他部分的性能。
为了更好地理解本发明,以上结合本发明的具体实施例做了详细描述,但并非是对本发明的限制。凡是依据本发明的技术实质对以上实施例所做的任何简单修改,均仍属于本发明技术方案的范围。本说明书中每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似的部分相互参见即可。对于系统实施例而言,由于其与方法实施例基本对应,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
Claims (10)
1.一种基于插件化的个人消息聚合系统,包括显示模块,其特征在于,还包括以下模块:
来源模块:用于登录到消息源,并从所述消息源获取和/或格式化消息;
控制中心:用于分析获取到的所述消息;
事件模块:用于将分析后的消息推送给用户。
2.如权利要求1所述的基于插件化的个人消息聚合系统,其特征在于:当所述来源模块连接到消息队列后向所述控制中心发送就绪指令。
3.如权利要求2所述的基于插件化的个人消息聚合系统,其特征在于:所述消息使用JSON格式进行传输。
4.如权利要求2所述的基于插件化的个人消息聚合系统,其特征在于:所述控制中心包括消息路由、分析模块、过滤模块和存储模块中的至少一种。
5.如权利要求4所述的基于插件化的个人消息聚合系统,其特征在于:所述消息路由通过Source队列、Analysis队列、Reply队列、Push队列和Callback队列中的至少一种进行消息分发。
6.如权利要求5所述的基于插件化的个人消息聚合系统,其特征在于:所述分析模块使用通过关键词提取算法提取消息中的关键词,公式为:
其中,d为阻尼参数代表每次迭代后的损耗概率,Vj为句子中每一词组的相似度向量。
7.如权利要求6所述的基于插件化的个人消息聚合系统,其特征在于:所述过滤模块用于检索消息并去除无用的部分。
8.如权利要求7所述的基于插件化的个人消息聚合系统,其特征在于:所述过滤模块通过聊天模式和正则设定判断消息是否推送。
9.如权利要求8所述的基于插件化的个人消息聚合系统,其特征在于:当聊天模式为私聊时,则消息必定被推送。
10.一种基于插件化的个人消息聚合方法,包括显示聚合后的信息,其特征在于,还包括以下步骤:
登录到消息源,并从所述消息源获取和/或格式化消息;
分析获取到的所述消息;
将分析后的消息推送给用户。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810840635.0A CN109361591B (zh) | 2018-07-27 | 2018-07-27 | 一种基于插件化的个人消息聚合系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810840635.0A CN109361591B (zh) | 2018-07-27 | 2018-07-27 | 一种基于插件化的个人消息聚合系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109361591A true CN109361591A (zh) | 2019-02-19 |
CN109361591B CN109361591B (zh) | 2022-03-22 |
Family
ID=65349740
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810840635.0A Expired - Fee Related CN109361591B (zh) | 2018-07-27 | 2018-07-27 | 一种基于插件化的个人消息聚合系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109361591B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113098761A (zh) * | 2021-03-31 | 2021-07-09 | 深圳市艾酷通信软件有限公司 | 通信方法、装置、电子设备和存储介质 |
CN114448929A (zh) * | 2022-04-08 | 2022-05-06 | 统信软件技术有限公司 | 数据链路转接方法、装置和系统,以及计算设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101534261A (zh) * | 2009-04-10 | 2009-09-16 | 阿里巴巴集团控股有限公司 | 一种垃圾消息的识别方法、装置和系统 |
CN101957755A (zh) * | 2010-09-21 | 2011-01-26 | 用友软件股份有限公司 | 消息统一管理方法和装置 |
US8185648B2 (en) * | 2000-03-02 | 2012-05-22 | Dearborn Group, Inc. | Multi-protocol adapter for in-vehicle and industrial communications networks |
CN106789572A (zh) * | 2016-12-19 | 2017-05-31 | 广州市康超信息科技有限公司 | 一种实现自适应消息过滤的即时通讯系统和即时通讯方法 |
CN107678801A (zh) * | 2017-10-09 | 2018-02-09 | 武汉斗鱼网络科技有限公司 | 一种插件加载的方法和装置 |
-
2018
- 2018-07-27 CN CN201810840635.0A patent/CN109361591B/zh not_active Expired - Fee Related
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8185648B2 (en) * | 2000-03-02 | 2012-05-22 | Dearborn Group, Inc. | Multi-protocol adapter for in-vehicle and industrial communications networks |
CN101534261A (zh) * | 2009-04-10 | 2009-09-16 | 阿里巴巴集团控股有限公司 | 一种垃圾消息的识别方法、装置和系统 |
CN101957755A (zh) * | 2010-09-21 | 2011-01-26 | 用友软件股份有限公司 | 消息统一管理方法和装置 |
CN106789572A (zh) * | 2016-12-19 | 2017-05-31 | 广州市康超信息科技有限公司 | 一种实现自适应消息过滤的即时通讯系统和即时通讯方法 |
CN107678801A (zh) * | 2017-10-09 | 2018-02-09 | 武汉斗鱼网络科技有限公司 | 一种插件加载的方法和装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113098761A (zh) * | 2021-03-31 | 2021-07-09 | 深圳市艾酷通信软件有限公司 | 通信方法、装置、电子设备和存储介质 |
CN114448929A (zh) * | 2022-04-08 | 2022-05-06 | 统信软件技术有限公司 | 数据链路转接方法、装置和系统,以及计算设备 |
CN114448929B (zh) * | 2022-04-08 | 2022-06-21 | 统信软件技术有限公司 | 数据链路转接方法、装置和系统,以及计算设备 |
Also Published As
Publication number | Publication date |
---|---|
CN109361591B (zh) | 2022-03-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110535831A (zh) | 基于Kubernetes和网络域的集群安全管理方法、装置及存储介质 | |
RU2419986C2 (ru) | Объединение многострочных протокольных вхождений | |
US7941828B2 (en) | Method and apparatus for simultaneous viewing of two isolated data sources | |
US8583743B1 (en) | System and method for message gateway consolidation | |
CN102648464A (zh) | 用于从网络数据中生成词汇的系统和方法 | |
US11886818B2 (en) | Method and apparatus for detecting anomalies in mission critical environments | |
US8250313B1 (en) | Conflict avoidance in data store replication | |
CN100550017C (zh) | 用于安全全文本索引的系统和方法 | |
CN109361591A (zh) | 一种基于插件化的个人消息聚合系统 | |
CN112511501A (zh) | 一种面向5g应用的数据安全监测系统 | |
CN109408594A (zh) | 一种基于区块链的跨链数据检索系统及方法 | |
CN114006868B (zh) | 流量筛选方法及装置 | |
CN113709189A (zh) | 检测规则库的生成方法及系统、电子设备、存储介质 | |
KR100680034B1 (ko) | 문맥 인식이 강화된 메시지 변환 시스템 및 방법 | |
JPH11259512A (ja) | データ検索システム | |
EP3502925B1 (en) | Computer system and method for extracting dynamic content from websites | |
CN110286823A (zh) | 信息处理方法及装置 | |
KR20050034680A (ko) | 문자메시지를 이용한 전화번호안내시스템 | |
JP2003006162A (ja) | 認証アプリケーションサービスシステム | |
CN103905193A (zh) | 信息交互方法、终端、安全信息接入系统及信息交互系统 | |
CN112733182A (zh) | 一种区块链节点访问内网隐私数据的方法及系统 | |
CN100395735C (zh) | Unix环境中远程终端接入的方法 | |
US7752293B1 (en) | Command processing in a telecommunications network | |
US20030163556A1 (en) | Management apparatus, interconnecting device, communication system, program and management method | |
CN115643062B (zh) | 一种基于人工智能的业务数据管理系统及其处理方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20220322 |
|
CF01 | Termination of patent right due to non-payment of annual fee |