本申请属于linux操作系统技术领域,具体地说,涉及一种linux下层次式输入法。
背景技术:
在linux操作系统现有技术中,输入法是基于xim(xinputmethod)协议采用client/server模型来实现的。当用户运行一个待输入的目标进程时(xim客户端),xim客户端会与x服务(xserver)通信,当用户通过键盘输入拼音串时,xserver会将键盘序列传给输入法,输入法再将按键序列转换成候选词并供用户选择,用户选择了想要的候选词后输入法再将结果回传给xserver,xserver再传递给xim客户端,达到输出文字的效果。
在传统linux输入法中,输入法框架、核心业务逻辑、显示界面都在同一个进程。当输入法自身存在缺陷、或者用户对输入法词库进行复杂操作、或者更新了不兼容词库、或者安装了不兼容皮肤等情况下,都有可能造成输入法产生异常突然崩溃。一旦输入法崩溃,用户将无法正常输入,用户必须手动重启输入法或者重启操作系统才能正常使用,从而给用户带来诸多不便。
技术实现要素:
有鉴于此,本申请所要解决的技术问题是提供了一种linux下支持自动故障恢复的输入法层次式加载方法,能够在linux输入法发生异常时自动故障恢复,防止用户在输入过程中因输入法异常崩溃而不能正常输入。
为了解决上述技术问题,本申请公开了一种linux下支持自动故障恢复的层次式输入法,并采用以下技术方案来实现。
一种linux下层次式输入法,包括交互界面层、接口框架层和内核业务层;所述接口框架层与xserver通信连接,并暴露一系列接口供所述交互界面层和所述内核业务层使用;所述交互界面层用于与用户的交互,所述内核业务层用于输入法内核业务的处理,所述交互界面层、所述接口框架层和所述内核业务层之间相互通信连接。
所述交互界面层、所述接口框架层和所述内核业务层之间还相互监控连接。
所述linux下层次式输入法,还包括监控模块,所述监控模块分别与所述交互界面层、所述接口框架层和所述内核业务层监控连接。
一种如上所述linux下层次式输入法的使用方法,其步骤包括:s1、用户通过键盘输入字符串;s2、xserver将接收到的按键事件传递给应用程序;s3、所述应用程序将收到的所述按键事件回传给所述xserver,询问所述xserver所述接口框架层是否打开,若否本次输入结束,若是则进入s4;s4、所述xserver将所述按键事件发送给所述接口框架层去处理;s5、所述接口框架层调用所述内核业务层解析所述按键事件,并在词库中检索候选词,然后将所述候选词返回到所述接口框架层;s6、所述接口框架层通过进程间通信将所述候选词传递给所述交互界面层;s7、用户通过所述交互界面层在所述候选词中进行选择;s8、所述交互界面层通知所述接口框架层用户的最优选词;s9、所述接口框架层将所述最优选词返回给所述xserver;s10、所述xserver得到所述最优选词后,再通知应用程序输出所述最优选词。
所述s1-s10任一步骤中出现所述输入法存在异常层或者崩溃层时,由监控模块或者所述异常层的监控层重启所述异常层或者所述崩溃层。
与现有技术相比,本申请可以获得包括以下技术效果:输入法的接口框架层、内核业务层、交互界面层是相互独立的进程,并且相互通过监控协议监控彼此运行状态。当输入法哪个层次出现崩溃时,其他层次或者监控程序会拉起这个层次。由于其他层次运行正常,不必重启整个输入法,各层次通过进程间通信可以快速相互连接上,输入法即可正常运行。避免了传统linux输入法出现异常崩溃时,必须重启整个输入法才能使用的弊端;整个系统在稳定性和内存消耗方面也得到很大改善。
当然,实施本申请的任一产品必不一定需要同时达到以上所述的所有技术效果。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是本申请输入法层次结构图。
图2是本申请输入法工作逻辑流程图。
图3是本申请故障恢复逻辑流程图。
具体实施方式
以下将配合附图及实施例来详细说明本申请的实施方式,藉此对本申请如何应用技术手段来解决技术问题并达成技术功效的实现过程能充分理解并据以实施。
如图1-2所示,一种linux下支持自动故障恢复的层次式输入法,该方法包括交互界面层、接口框架层、内核业务层。接口框架层与xserver通信连接,并暴露一系列接口供交互界面层和内核业务层使用;交互界面层用于与用户的交互;内核业务层用于输入法内核业务的处理。三个层次相互独立,即分属于不同的进程。交互界面层、接口框架层、内核业务层之间相互通信连接,通过进程间的通信技术进行信号以及数据的传递。三个层次之间还基于监控协议相互监控连接。
接口框架层与x服务端(即xserver)连接,xserver与当前需要输入的应用程序(即ximclient)连接。它们之间的通讯是利用xim的协议来实现的。
输入法自启动后,接口框架层与xserver和ximclient交互,并暴露一系列接口(即接口模块)供交互界面层和内核业务层使用。接口框架层会启动内核业务层和交互界面层。然后接口框架层会主动连接交互界面层和内核业务层,以保证能够完成三层次间的信号和数据的交换。此时输入法已经准备就绪。
当用户按下键盘输入字符串,xserver将接收到按键序列事件传递给应用程序窗口即xim客户端;xim客户端将收到的按键回传给xserver,询问xserver关于ximserver(也就是输入法接口框架)的相关信息。倘若输入法是打开的,xserver会将事件发送给接口框架去处理。接口框架再调用内核业务(例如拼音输入法引擎)解析并且在词库中检索候选词,然后将候选词返回到输入法接口框架,输入法接口框架通过进程间通信将候选词传递给交互界面。用户选择后,通过交互界面通知接口框架所选字符串,接口框架再将字符串返回给xserver。xserver得到字符串后,再通知窗口输出字符串。
linux下支持自动故障恢复的层次式输入法还可以包括监控模块。若包括监控模块,则监控模块分别与交互界面层、接口框架层、内核业务层连接,且为基于监控协议的监控连接。
操作系统启动以后,自启动输入法的接口框架层,接口框架层启动内核业务层、交互界面层和监控模块。监控模块实时监控接口框架层、内核业务层和交互界面层。接口框架层、内核业务层和交互界面层也会相互监控。本实施例选用的监控流如图3所示,交互界面层监控接口框架层,接口框架层监控内核业务层,内核业务层监控交互界面层。本实施例选用监控模块和三层次相互监控两种监控方式同时应用。需要说明的是,三层次之间的相互监控和外部监控模块对三层次进行的监控,这两种方式并不是一定要同时使用,只要可以达到有效的监控,从而实现自动故障恢复就属于本申请的核心发明思想。
以本实施例为例,如果在使用过程中内核业务层崩溃,监控模块或者接口框架层会重启内核业务层,重启内核业务层后,接口框架层重新连接交互界面层和内核业务层,达到快速故障恢复效果;如果在使用过程中接口框架层崩溃,监控模块或者交互界面层会重启接口框架层,重启接口框架层后,接口框架层重新连接交互界面层和内核业务层,达到快速故障恢复效果;如果在使用过程中交互界面层崩溃,监控模块或者内核业务层会重启交互界面层,重启交互界面层后,接口框架层重新连接交互界面层和内核业务层,达到快速故障恢复效果。
本申请的有益效果是:相较于linux传统输入法,本申请输入法的接口框架层、内核业务层、交互界面层是相互独立的进程,并且相互通过监控协议监控彼此运行状态。当输入法哪个层次出现崩溃时,其他层次或者监控程序会拉起这个层次。由于其他层次运行正常,不必重启整个输入法,各层次通过进程间通信可以快速相互连接上,输入法即可正常运行。避免了传统linux输入法出现异常崩溃时,必须重启整个输入法才能使用的弊端;整个系统在稳定性和内存消耗方面也得到很大改善。
以上对本申请实施例所提供的一种linux下支持自动故障恢复的输入法层次式加载方法,进行了详细介绍。以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
如在说明书及权利要求当中使用了某些词汇来指称特定组件。本领域技术人员应可理解,硬件制造商可能会用不同名词来称呼同一个组件。本说明书及权利要求并不以名称的差异来作为区分组件的方式,而是以组件在功能上的差异来作为区分的准则。如在通篇说明书及权利要求当中所提及的“包含”为一开放式用语,故应解释成“包含但不限定于”。“大致”是指在可接收的误差范围内,本领域技术人员能够在一定误差范围内解决所述技术问题,基本达到所述技术效果。说明书后续描述为实施本申请的较佳实施方式,然所述描述乃以说明本申请的一般原则为目的,并非用以限定本申请的范围。本申请的保护范围当视所附权利要求所界定者为准。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个......”限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。
上述说明示出并描述了本申请的若干优选实施例,但如前所述,应当理解本申请并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述申请构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本申请的精神和范围,则都应在本申请所附权利要求的保护范围内。