CN109727595A - 一种语音识别服务器的软件设计方法 - Google Patents
一种语音识别服务器的软件设计方法 Download PDFInfo
- Publication number
- CN109727595A CN109727595A CN201811638895.6A CN201811638895A CN109727595A CN 109727595 A CN109727595 A CN 109727595A CN 201811638895 A CN201811638895 A CN 201811638895A CN 109727595 A CN109727595 A CN 109727595A
- Authority
- CN
- China
- Prior art keywords
- subprocess
- client
- speech recognition
- data
- pool
- 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
Landscapes
- Telephonic Communication Services (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开一种针对局域网基于socket网络通信的语音识别服务器软件设计方法,采用进程池+任务池+线程池构建socket服务器,设计并优化了系统架构,从而达到可以支撑一定的并发(适配服务器硬件)、可靠地服务客户端、占用较少的资源。这种设计方法特点就是能够在满足功能需求前提下,以最小的资源占用进行灵活部署。本发明中提出的设计方法在局域网中搭建的语音识别服务器,在给定的并发量下,识别效果流畅,性能稳定可靠,占用资源有限。
Description
技术领域
本发明公开一种语音识别服务器的软件设计方法,该语音识别服务器适用于局域网或者其他网络,属于人工智能、并发网络通信领域。
背景技术
近些年来,随着自动语音识别技术(ASR)的不断完善,涌现了一些拥有较为成熟技术的公司,比如:科大讯飞、百度等。在市场的强烈需求刺激和这些公司的大力推动下,ASR已经走进了很多领域,包括移动设备、汽车、家居等C端应用和电子病历、客服等B端场景。但是,以上公司将自己的服务部署于公网,对于一些只能限定于内网工作的设备(银行、税务、医院的自助设备或者服务机器人等)无法使用,或者将公网服务直接部署于内网将增加过多的成本。因而这里提出一种针对局域网构建语音识别服务器的软件设计方法。
发明内容
本发明要解决的技术问题是提供一种语音识别服务器的软件设计方法,在满足功能需求前提下,以最小的资源占用进行灵活部署,适用于局域网。
为了解决所述技术问题,本发明采用的技术方案是:一种语音识别服务器的软件设计方法,包括以下步骤:
S01)、通信模块设计,socket用来连接服务端与客户端,服务端建立socket连接并进行监听,当收到客户端的连接请求,则建立连接,然后接收消息、解析,经过处理后立即返回给客户端;
S02)、应用层设计,建立在socket上的自定义的数据协议,数据头描述数据包的信息、包含类型、长度,数据包中包含音频数据;
S03)、进程池设计,包括主进程和子进程,主进程监听socket,并在运行之初创建所有子进程,同时建立主进程与子进程之间的通道,主进程向子进程分配客户端连接,子进程接受以后利用任务池完成相应的数据处理;
S04)、任务池设计,任务池是某个子进程内的所有可以执行的任务,它保存某个客户端所有有用的信息,每当子进程检测到某个连接上有数据到来,它会去执行相应的任务;由于语音识别引擎需要占用的资源很多,包括时间和空间,因此,这里执行任务是指将接收到的数据推进对应线程里面运行的语音识别引擎,然后在回调函数里实现识别结果返回;
S05)、线程池设计,每个子进程包含一个线程池,每个线程池里面运行一个独立的语音识别引擎,任务池执行任务时,将接收到的数据推进到相应线程池里面运行的语音识别引擎,然后在回调函数里实现识别结果返回。
进一步的,进程池、任务池、线程池的大小是与语音识别引擎占用的资源和服务器硬件配置相匹配的,程序运行期间固定。
进一步的,服务端与客户端之间的socket为全双工通信,两个线程可以同时对服务端和客户端进行操作,一个接受数据,另一个发送数据。
为了节省带宽,应用层的数据包采用压缩格式,同时带有验证身份的客户端的唯一标识。
由于线程和引擎的创建和销毁占用很多时间,因而线程池在子进程开始运行时即创建完毕,然后等待子进程的主线程利用任务池给相应的线程推送数据。
进一步的,主进程利用epoll机制复用IO,将监听socket、信号加入epoll核心事件表。
进一步的,主进程的消息处理过程为:A、主进程收到监听socket的消息时,说明有客户端请求连接,它计算当前是否还有子进程可以接收,如果有,则通过robin算法选择一个子进程并通知它,否则,通知客户端服务器已经达到负载;B、主进程接收到关闭信号时,将向所有子进程发出停止信号,结束所有子进程;C、主进程接收到子进程结束信号时,对子进程退出码进行分析,如果为异常退出,则重新创建该序号对应的子进程,如果是正常退出,则计算当前正在运行的进程个数,当全部退出时,主进程退出。
进一步的,子进程利用epoll机制复用IO,将与客户端连接、主进程之间的通道、信号加入epoll核心事件表。
进一步的,子进程的消息处理过程为:A、当与主进程之间的通道接收到数据时,从监听socket接受新的连接,将其加入核心事件表进行监听;B、当客户端连接接收到数据时,解析数据后,选择一个空闲的任务,将数据发送到与之对应的线程进行语音识别,该线程将识别结果返回给客户端;C、当接收到停止信号时,进程将立即退出消息循环,停止工作;D、当接收到定时信号时,子进程将分析整个任务池状态,如果发现有异常事件发生,首先将该进程置为异常,然后等待其他线程处理完毕,最终退出进程,主进程检测到异常退出的子进程,将重新创建新的子进程加入进程池,如果发现某个任务一段时间内没有上传数据,则释放该客户端连接占用的资源然后关闭该连接。
本发明的有益效果:本发明提出一种针对局域网基于socket网络通信的语音识别服务器软件设计方法,采用进程池+任务池+线程池构建socket服务器,设计并优化了系统架构,从而达到可以支撑一定的并发(适配服务器硬件)、可靠地服务客户端、占用较少的资源。这种设计方法特点就是能够在满足功能需求前提下,以最小的资源占用进行灵活部署。本发明中提出的设计方法在局域网中搭建的语音识别服务器,在给定的并发量下,识别效果流畅,性能稳定可靠,占用资源有限。
附图说明
图1为本软件设计方法的框架图;
图2为主进程消息处理过程的流程图;
图3为子进程消息处理过程的流程图。
具体实施方式
下面结合附图和具体实施例对本发明作进一步的说明。
实施例1
根据局域网中语音识别服务器的特点,本实施例公开了一种上述设计方法的具体实现方式,能够高效可靠经济的完成功能需求,其是在Linux服务器上的一种实施方式,包括以下步骤:
1)主进程加载配置文件,主要包括该服务器的性能调节参数、网络配置等。
2)创建并绑定监听socket,服务端与客户端之间的socket为全双工通信,两个线程可以同时对服务端和客户端进行操作,一个接受数据,另一个发送数据。
3)通过fork创建进程池,建立主进程与子进程之间的通道,主进程与子进程之间共享监听socket,这样可以达到主进程监听与分发,子进程进行处理。
4)利用epoll机制复用IO,主进程可以将监听socket、信号加入epoll核心事件表,这样就实现了统一信号源。
5)如图2所示,主进程的消息处理过程如下:
(a)每当进程收到监听socket的消息,说明有客户端请求连接。主进程计算进程池当前的空闲情况,如果没有空闲进程,说明目前服务器已经满负荷,将给客户端发送服务端超负荷消息;如果存在空闲进程,主进程将利用robin算法,在空闲的进程中选择一个子进程用于处理客户端请求,发送消息给该子进程。
(b)当接收到关闭信号时,将向所有子进程发出停止信号,结束所有子进程。
(c)当接收到子进程结束信号时,对子进程退出码进行分析,如果为异常退出,则重新创建该序号对应的子进程,这样可以保证,整个语音识别服务器不会因为一个小的错误而出现宕机的现象,增加了服务器的稳定性,能够更加可靠的为终端提供语音识别服务。如果是正常退出,则计算当前正在运行的进程个数,当全部退出时,主进程退出。
6)子进程利用epoll机制复用IO,可以将与客户端连接、主进程之间的通道、各种信号等加入epoll核心事件表,从而实现统一事件源。
7)创建并初始化任务池、线程池,启动语音识别服务器引擎。
8)如图3所示,子进程消息处理过程如下:
(a)当与主进程之间的通道接收到数据时,表明有新的客户端请求连接,此时从监听socket接受新的连接,将其加入核心事件表进行监听。
(b)当客户端连接接收到数据时,解析数据后,选择一个空闲的任务,将数据发送到与之对应的线程进行语音识别,该线程会负责将识别结果返回给客户端,包括临时结果、最终结果、各种错误信息等。
(c)当接收到停止信号时,进程将立即退出消息循环,停止工作。
(d)当接收到定时信号时,子进程将分析整个任务池状态,如果发现有异常事件发生,首先将该进程置为异常,然后等待其他线程处理完毕,最终退出进程。父进程检测到异常退出的子进程,将重新创建新的子进程加入进程池,从而保证服务的稳定性。如果发现某个任务一段时间内没有上传数据,则释放该客户端连接占用的资源(语音识别服务引擎、任务中的相关资源),然后关闭该连接。
如图1所示,为本实施例所述语音识别服务器的软件设计方法的框架图,包括通信模块、应用层、进程池、任务池、线程池,设计时先完成所述模块的设计,然后定义它们在处于客户端的请求连接、数据时的作用,通信模块基于socket网络通信,进程池、任务池、线程池的大小是与语音识别引擎占用的资源和服务器硬件配置相匹配的,程序运行期间固定。进程池的规模是固定的,不会超过指定的进程数目。这个数目是根据服务器硬件和局域网中同时在线终端数量决定的。线程池的规模也是固定的,不是动态创建与销毁。在局域网环境中同时在线终端设备数量是有限的、可以预测的。这样,同时保证了效率和功能。
本实施例所述语音识别服务的软件设计方法可以根据服务器硬件配置灵活的部署,占用最小资源的同时满足局域网环境下功能的需求。
以上描述的仅是本发明的基本原理和优选实施例,本领域技术人员根据本发明做出的改进和替换,属于本发明的保护范围。
Claims (9)
1.一种语音识别服务器的软件设计方法,其特征在于:包括以下步骤:
S01)、通信模块设计,socket用来连接服务端与客户端,服务端建立socket连接并进行监听,当收到客户端的连接请求,则建立连接,然后接收消息、解析,经过处理后立即返回给客户端;
S02)、应用层设计,建立在socket上的自定义的数据协议,数据头描述数据包的信息、包含类型、长度,数据包中包含音频数据;
S03)、进程池设计,包括主进程和子进程,主进程监听socket,并在运行之初创建所有子进程,同时建立主进程与子进程之间的通道,主进程向子进程分配客户端连接,子进程接受以后利用任务池完成相应的数据处理;
S04)、任务池设计,任务池是某个子进程内的所有可以执行的任务,它保存某个客户端所有有用的信息,每当子进程检测到某个连接上有数据到来,它会去执行相应的任务;
S05)、线程池设计,每个子进程包含一个线程池,每个线程池里面运行一个独立的语音识别引擎,任务池执行任务时,将接收到的数据推进到相应线程池里面运行的语音识别引擎,然后在回调函数里实现识别结果返回。
2.根据权利要求1所述的语音识别服务器的软件设计方法,其特征在于:进程池、任务池、线程池的大小是与语音识别引擎占用的资源和服务器硬件配置相匹配的,程序运行期间固定。
3.根据权利要求1所述的语音识别服务器的软件设计方法,其特征在于:服务端与客户端之间的socket为全双工通信,两个线程可以同时对服务端和客户端进行操作,一个接受数据,另一个发送数据。
4.根据权利要求1所述的语音识别服务器的软件设计方法,其特征在于:应用层的数据包采用压缩格式,同时带有验证身份的客户端的唯一标识。
5.根据权利要求1所述的语音识别服务器的软件设计方法,其特征在于:线程池在子进程开始运行时即创建完毕,然后等待子进程的主线程利用任务池给相应的线程推送数据。
6.根据权利要求1所述的语音识别服务器的软件设计方法,其特征在于:主进程利用epoll机制复用IO,将监听socket、信号加入epoll核心事件表。
7.根据权利要求6所述的语音识别服务器的软件设计方法,其特征在于:主进程的消息处理过程为:A、主进程收到监听socket的消息时,说明有客户端请求连接,它计算当前是否还有子进程可以接收,如果有,则通过robin算法选择一个子进程并通知它,否则,通知客户端服务器已经达到负载;B、主进程接收到关闭信号时,将向所有子进程发出停止信号,结束所有子进程;C、主进程接收到子进程结束信号时,对子进程退出码进行分析,如果为异常退出,则重新创建该序号对应的子进程,如果是正常退出,则计算当前正在运行的进程个数,当全部退出时,主进程退出。
8.根据权利要求1所述的语音识别服务器的软件设计方法,其特征在于:子进程利用epoll机制复用IO,将与客户端连接、主进程之间的通道、信号加入epoll核心事件表。
9.根据权利要求1所述的语音识别服务器的软件设计方法,其特征在于:子进程的消息处理过程为:A、当与主进程之间的通道接收到数据时,从监听socket接受新的连接,将其加入核心事件表进行监听;B、当客户端连接接收到数据时,解析数据后,选择一个空闲的任务,将数据发送到与之对应的线程进行语音识别,该线程将识别结果返回给客户端;C、当接收到停止信号时,进程将立即退出消息循环,停止工作;D、当接收到定时信号时,子进程将分析整个任务池状态,如果发现有异常事件发生,首先将该进程置为异常,然后等待其他线程处理完毕,最终退出进程,主进程检测到异常退出的子进程,将重新创建新的子进程加入进程池,如果发现某个任务一段时间内没有上传数据,则释放该客户端连接占用的资源然后关闭该连接。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811638895.6A CN109727595B (zh) | 2018-12-29 | 2018-12-29 | 一种语音识别服务器的软件设计方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811638895.6A CN109727595B (zh) | 2018-12-29 | 2018-12-29 | 一种语音识别服务器的软件设计方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109727595A true CN109727595A (zh) | 2019-05-07 |
CN109727595B CN109727595B (zh) | 2021-08-03 |
Family
ID=66297956
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811638895.6A Active CN109727595B (zh) | 2018-12-29 | 2018-12-29 | 一种语音识别服务器的软件设计方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109727595B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110289016A (zh) * | 2019-06-20 | 2019-09-27 | 深圳追一科技有限公司 | 一种基于实时对话的语音质检方法、装置及电子设备 |
CN112015559A (zh) * | 2020-09-03 | 2020-12-01 | 深圳虹川科技有限公司 | 基于http协议的异步实时数据更新系统及方法 |
CN112995347A (zh) * | 2021-05-11 | 2021-06-18 | 北京沃丰时代数据科技有限公司 | 实现端对端实时数据展示的方法、装置、设备及存储介质 |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101287008A (zh) * | 2008-05-26 | 2008-10-15 | 中兴通讯股份有限公司 | 实现子网依赖汇聚协议的系统 |
CN102546437A (zh) * | 2012-02-20 | 2012-07-04 | 南京邮电大学 | 一种面向物联网平台的套接字实现方法 |
CN102916953A (zh) * | 2012-10-12 | 2013-02-06 | 青岛海信传媒网络技术有限公司 | 基于tcp连接实现并发服务的方法及装置 |
CN105094960A (zh) * | 2015-07-20 | 2015-11-25 | 努比亚技术有限公司 | 基于双通道的数据加载装置和方法 |
US20160156747A1 (en) * | 2014-12-01 | 2016-06-02 | Oracle International Corporation | Management of transmission control blocks (tcbs) supporting tcp connection requests in multiprocessing environments |
CN106302554A (zh) * | 2016-11-08 | 2017-01-04 | 郑州云海信息技术有限公司 | 一种socket通信方法、装置和存储设备 |
CN106997307A (zh) * | 2017-02-13 | 2017-08-01 | 上海大学 | 一种面向多终端无线通信的Socket线程池设计方法 |
CN107391090A (zh) * | 2017-07-28 | 2017-11-24 | 成都优博创通信技术股份有限公司 | 多线程执行方法及装置 |
CN107767873A (zh) * | 2017-10-20 | 2018-03-06 | 广东电网有限责任公司惠州供电局 | 一种快速准确的离线语音识别装置及方法 |
CN108011883A (zh) * | 2017-12-05 | 2018-05-08 | 深圳市创维软件有限公司 | 一种远程调试方法、终端设备和服务器 |
CN108200091A (zh) * | 2013-01-17 | 2018-06-22 | 华为技术有限公司 | 一种数据包处理方法和装置 |
-
2018
- 2018-12-29 CN CN201811638895.6A patent/CN109727595B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101287008A (zh) * | 2008-05-26 | 2008-10-15 | 中兴通讯股份有限公司 | 实现子网依赖汇聚协议的系统 |
CN102546437A (zh) * | 2012-02-20 | 2012-07-04 | 南京邮电大学 | 一种面向物联网平台的套接字实现方法 |
CN102916953A (zh) * | 2012-10-12 | 2013-02-06 | 青岛海信传媒网络技术有限公司 | 基于tcp连接实现并发服务的方法及装置 |
CN108200091A (zh) * | 2013-01-17 | 2018-06-22 | 华为技术有限公司 | 一种数据包处理方法和装置 |
US20160156747A1 (en) * | 2014-12-01 | 2016-06-02 | Oracle International Corporation | Management of transmission control blocks (tcbs) supporting tcp connection requests in multiprocessing environments |
CN105094960A (zh) * | 2015-07-20 | 2015-11-25 | 努比亚技术有限公司 | 基于双通道的数据加载装置和方法 |
CN106302554A (zh) * | 2016-11-08 | 2017-01-04 | 郑州云海信息技术有限公司 | 一种socket通信方法、装置和存储设备 |
CN106997307A (zh) * | 2017-02-13 | 2017-08-01 | 上海大学 | 一种面向多终端无线通信的Socket线程池设计方法 |
CN107391090A (zh) * | 2017-07-28 | 2017-11-24 | 成都优博创通信技术股份有限公司 | 多线程执行方法及装置 |
CN107767873A (zh) * | 2017-10-20 | 2018-03-06 | 广东电网有限责任公司惠州供电局 | 一种快速准确的离线语音识别装置及方法 |
CN108011883A (zh) * | 2017-12-05 | 2018-05-08 | 深圳市创维软件有限公司 | 一种远程调试方法、终端设备和服务器 |
Non-Patent Citations (2)
Title |
---|
张南平,徐静: "基于进程池的Linux并发服务器的研究", 《计算机与数字工程》 * |
武嘉捷: "Web服务器端线程池模型的设计", 《山西农业大学学报》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110289016A (zh) * | 2019-06-20 | 2019-09-27 | 深圳追一科技有限公司 | 一种基于实时对话的语音质检方法、装置及电子设备 |
CN112015559A (zh) * | 2020-09-03 | 2020-12-01 | 深圳虹川科技有限公司 | 基于http协议的异步实时数据更新系统及方法 |
CN112995347A (zh) * | 2021-05-11 | 2021-06-18 | 北京沃丰时代数据科技有限公司 | 实现端对端实时数据展示的方法、装置、设备及存储介质 |
CN112995347B (zh) * | 2021-05-11 | 2021-08-10 | 北京沃丰时代数据科技有限公司 | 实现端对端实时数据展示的方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN109727595B (zh) | 2021-08-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109727595A (zh) | 一种语音识别服务器的软件设计方法 | |
CN102521044B (zh) | 一种基于消息中间件的分布式任务调度方法及系统 | |
CN105893157B (zh) | 一种开放分布式系统资源管理与任务调度系统与方法 | |
CN101281480B (zh) | 一种嵌入式系统中实现睡眠功能的方法 | |
CN110475091A (zh) | 视频会议的处理方法及装置 | |
CN102207890A (zh) | 一种任务信息处理方法及调度控制处理装置 | |
CN109766201A (zh) | 任务分发方法、服务器、客户端和系统 | |
CN107066339A (zh) | 分布式作业管理器及分布式作业管理方法 | |
CN108924007A (zh) | 通信运营信息的大数据采集及存储系统和方法 | |
CN114710571B (zh) | 数据包处理系统 | |
CN106878060A (zh) | 一种多业务综合接入设备的主备同步系统及方法 | |
CN108717380A (zh) | 消息处理方法和装置 | |
CN110365786A (zh) | 作业处理系统、异步作业调度方法和计算机设备 | |
CN105721553B (zh) | 一种自适应集群消息分发器 | |
CN103905498B (zh) | 服务信息管理方法及服务信息管理系统 | |
CN109600278A (zh) | 一种数据通信方法、装置、设备及介质 | |
US20100113084A1 (en) | Power saving in wireless networks | |
CN115996197B (zh) | 一种流量拥塞前置的分布式计算流量仿真系统与方法 | |
CN106254534B (zh) | 基于混合架构的分布式集群监控代理及方法 | |
CN112099930A (zh) | 一种量子计算机集群分布式队列调度方法 | |
CN101626348A (zh) | 一种实现企业融合通讯的业务支撑系统及其方法 | |
CN106909368A (zh) | 一种实现快速业务开发的服务端业务层逻辑架构 | |
CN104636206B (zh) | 一种系统性能的优化方法和装置 | |
CN102693434B (zh) | 射频识别设备接口层的通信装置及方法 | |
CN113347430B (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 |