本发明涉及网络通信技术领域,特别是涉及一种基于c 11的网络通信方法及系统。
背景技术:
随着网络通信在软件中的地位越来越重要,设计开发一种简便的进程间通信框架技术越来越重要。进程间通信在国产linux操作系统上常见的有unixdomainsocket和inetsocket,它们以流的方式进行数据传输。现在主要方式有架构在很多开源网络通信项目之上封装,缺点是很多通信库量级过重,不支持面向对象方式。
技术实现要素:
本发明的目的是提供一种基于c 11的网络通信方法及系统,旨在解决现有技术中进程间通信不支持面向对象且量级过重,实现轻量化,不占用大量资源,减轻用户的二次开发工作量。
为达到上述技术目的,本发明提供了一种基于c 11的网络通信方法,所述方法包括以下步骤:
s1、提前注册业务处理函数,针对所需处理的端口或本地通信文件路径添加事件的处理函数;
s2、在不同子线程中设置主函数循环执行,调用监听功能接口监听对端事件;
s3、当对端事件发生时,调用事件的处理函数添加到线程池中,每个线程实现异步处理事件业务。
优选地,所述监听对端事件通过调用add_listen_port与add_listen_unix功能接口来完成。
优选地,所述注册业务处理函数通过调用add_task_function功能接口来完成。
本发明还提供了一种基于c 11的网络通信系统,所述系统包括:
处理函数注册模块,用于提前注册业务处理函数,针对所需处理的端口或本地通信文件路径添加事件的处理函数;
主函数执行模块,用于在不同子线程中设置主函数循环执行,调用监听功能接口监听对端事件;
事件处理模块,用于当对端事件发生时,调用事件的处理函数添加到线程池中,每个线程实现异步处理事件业务。
优选地,所述监听对端事件通过调用add_listen_port与add_listen_unix功能接口来完成。
优选地,所述注册业务处理函数通过调用add_task_function功能接口来完成。
发明内容中提供的效果仅仅是实施例的效果,而不是发明所有的全部效果,上述技术方案中的一个技术方案具有如下优点或有益效果:
与现有技术相比,本发明利用c 11新特性架构设计进程间通信,通过在cpu中设置循环执行的主线程,调用add_listen_port与add_listen_unix功能接口来监听事件,并预先添加事件的处理函数,当事件发生后,系统将用户注册的处理函数添加到线程池中,从而实现异步处理事件业务。本发明对外提供统一接口,用户只需要注册自己的工作函数即可,极大减轻了用户的二次开发工作量。本发明代码为轻量级,不占用系统过大资源;接口简单,用户只需关心接口并且注册所关心的功能即可;同时支持本地通信和网络通信。
附图说明
图1为本发明实施例中所提供的一种基于c 11的网络通信方法流程图;
图2为本发明实施例中所提供的一种基于c 11的网络通信系统框图。
具体实施方式
为了能清楚说明本方案的技术特点,下面通过具体实施方式,并结合其附图,对本发明进行详细阐述。下文的公开提供了许多不同的实施例或例子用来实现本发明的不同结构。为了简化本发明的公开,下文中对特定例子的部件和设置进行描述。此外,本发明可以在不同例子中重复参考数字和/或字母。这种重复是为了简化和清楚的目的,其本身不指示所讨论各种实施例和/或设置之间的关系。应当注意,在附图中所图示的部件不一定按比例绘制。本发明省略了对公知组件和处理技术及工艺的描述以避免不必要地限制本发明。
下面结合附图对本发明实施例所提供的一种基于c 11的网络通信方法及系统进行详细说明。
如图1所示,本发明实施例公开了一种基于c 11的网络通信方法,所述方法包括以下步骤:
s1、提前注册业务处理函数,针对所需处理的端口或本地通信文件路径添加事件的处理函数;
s2、在不同子线程中设置主函数循环执行,调用监听功能接口监听对端事件;
s3、当对端事件发生时,调用事件的处理函数添加到线程池中,每个线程实现异步处理事件业务。
本发明实施例的通信方法对本地进程间通信有较好的支持,主线程启动后进入事件循环,用户可以添加自己关心的端口或者本地通信文件路径,且可以同时添加多个,可添加事件的处理函数,函数可以是类成员函数或者普通函数,数据流长度最大支持8个字节长度。
zflocaltcpservice是系统服务程序,是整个通信架构的主线程,通过调用add_listen_port与add_listen_unix功能接口来监听事件,通过调用add_task_function功能接口来注册业务处理函数,改函数可支持不定参数,用户可根据需要传入需要的数据。
注册业务处理函数可针对所需处理的端口或本地通信文件路径,进行事件处理函数的添加,即可针对某一类型事件设置业务处理函数,当该事件发生时,线程自动执行该业务处理函数,从而一直循环执行的主函数无需考虑事件的处理内容。
当整个通信架构的主线程启动后,会生成四个子线程一直等待对端事件的发生,即通过add_listen_port与add_listen_unix功能接口来监听对端事件,当对端事件发生后,系统将用户通过add_task_function注册的业务处理函数添加到线程池,从而每个线程可以异步处理事件业务。
如下代码所示:
每个线程的work函数一直常驻在cpu中,循环等待对端通信请求的任务,当如果有新的任务添加到队列中时,则work函数即被唤醒,并从任务队列中依次取出执行任务,通过预先注册的业务处理函数进行事件的相关处理,而work函数不关心任务的具体实现,极大减轻了用户的工作量。
另外,本发明实施例所述方法可同时支持断线自连功能,如拔网线等异常情况发生时,通信会自动建立,保证系统稳定性。
本发明实施例利用c 11新特性架构设计进程间通信,通过在cpu中设置循环执行的主线程,调用add_listen_port与add_listen_unix功能接口来监听事件,并预先添加事件的处理函数,当事件发生后,系统将用户注册的处理函数添加到线程池中,从而实现异步处理事件业务。本发明对外提供统一接口,用户只需要注册自己的工作函数即可,极大减轻了用户的二次开发工作量。本发明代码为轻量级,不占用系统过大资源;接口简单,用户只需关心接口并且注册所关心的功能即可;同时支持本地通信和网络通信。
如图2所示,本发明实施例还公开了一种基于c 11的网络通信系统,所述系统包括:
处理函数注册模块,用于提前注册业务处理函数,针对所需处理的端口或本地通信文件路径添加事件的处理函数;
主函数执行模块,用于在不同子线程中设置主函数循环执行,调用监听功能接口监听对端事件;
事件处理模块,用于当对端事件发生时,调用事件的处理函数添加到线程池中,每个线程实现异步处理事件业务。
zflocaltcpservice是系统服务程序,是整个通信架构的主线程,通过调用add_listen_port与add_listen_unix功能接口来监听事件,通过调用add_task_function功能接口来注册业务处理函数,改函数可支持不定参数,用户可根据需要传入需要的数据。
注册业务处理函数可针对所需处理的端口或本地通信文件路径,进行事件处理函数的添加,即可针对某一类型事件设置业务处理函数,当该事件发生时,线程自动执行该业务处理函数,从而一直循环执行的主函数无需考虑事件的处理内容。
当整个通信架构的主线程启动后,会生成四个子线程一直等待对端事件的发生,即通过add_listen_port与add_listen_unix功能接口来监听对端事件,当对端事件发生后,系统将用户通过add_task_function注册的业务处理函数添加到线程池,从而每个线程可以异步处理事件业务。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
1.一种基于c 11的网络通信方法,其特征在于,所述方法包括以下步骤:
s1、提前注册业务处理函数,针对所需处理的端口或本地通信文件路径添加事件的处理函数;
s2、在不同子线程中设置主函数循环执行,调用监听功能接口监听对端事件;
s3、当对端事件发生时,调用事件的处理函数添加到线程池中,每个线程实现异步处理事件业务。
2.根据权利要求1所述的一种基于c 11的网络通信方法,其特征在于,所述监听对端事件通过调用add_listen_port与add_listen_unix功能接口来完成。
3.根据权利要求1所述的一种基于c 11的网络通信方法,其特征在于,所述注册业务处理函数通过调用add_task_function功能接口来完成。
4.一种基于c 11的网络通信系统,其特征在于,所述系统包括:
处理函数注册模块,用于提前注册业务处理函数,针对所需处理的端口或本地通信文件路径添加事件的处理函数;
主函数执行模块,用于在不同子线程中设置主函数循环执行,调用监听功能接口监听对端事件;
事件处理模块,用于当对端事件发生时,调用事件的处理函数添加到线程池中,每个线程实现异步处理事件业务。
5.根据权利要求4所述的一种基于c 11的网络通信系统,其特征在于,所述监听对端事件通过调用add_listen_port与add_listen_unix功能接口来完成。
6.根据权利要求4所述的一种基于c 11的网络通信系统,其特征在于,所述注册业务处理函数通过调用add_task_function功能接口来完成。
技术总结