[发明专利]一种基于协程机制的通讯方法有效
申请号: | 201610082073.9 | 申请日: | 2016-02-05 |
公开(公告)号: | CN105760237B | 公开(公告)日: | 2019-03-22 |
发明(设计)人: | 王乾;马红兵 | 申请(专利权)人: | 南京贝伦思网络科技股份有限公司 |
主分类号: | G06F9/52 | 分类号: | G06F9/52 |
代理公司: | 南京钟山专利代理有限公司 32252 | 代理人: | 戴朝荣 |
地址: | 210017 江苏省南京市建*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 机制 通讯 方法 | ||
本发明提供了一种基于协程机制的通讯方法。所述基于协程机制的通讯方法包括如下步骤:a、在主线程循环过程中,监听socket;b、判断所述socket是否有输入数据,如果有,则执行步骤c;c、对所述输入数据进行解码分析,并判断所述输入数据是请求数据或回应数据,如果是请求数据,则执行步骤d,如果是回应数据,则执行步骤e;d、创建协程函数,并利用所述协程函数对所述请求数据进行处理;e、根据所述回应数据查找与所述回应数据相对应的协程函数,并切换到所述协程函数处理所述回应数据。本发明的基于协程机制的通讯方法不仅可以解决阻塞方式下的等待问题,还可以避开多线程实现的数据访问冲突。
【技术领域】
本发明属于计算机技术领域,具体地涉及一种基于协程机制的通讯方法。
【背景技术】
在现有的计算机技术中,传统的进程间或主机间的通讯采用Socket方式来进行。现有的Socket通讯包括两种模式:阻塞方式和非阻塞方式。
阻塞方式,也叫串行方式,是指:在一个线程或者一个函数中实现,通过send函数发送数据后,立刻调用recv函数以阻塞的方式获取远端回应数据。而且,在此过程中,线程一直处于等待状态,无法进行其他操作。这种情况下,一般采用多线程来实现同一连接上的并发操作,共享的数据采用信号量等防止访问冲突。
非阻塞的方式,也叫并行的方式,是指采用epoll或select等函数,对连接上的数据进行接收,并调用相应函数的对数据进处理。如果某个函数模块通过这个连接发送数据后,并不能直接收到回应,必须另外提供一个回调函数,等真正收到回应后,调用此回调函数来处理回应数据结果。但是,在此过程中,必须通过堆或者全局内存来保存必要的信息,同时回调机制会导致通讯数据交互的复杂度。
因此,有必要提供一种基于协程机制的通讯方法。
【发明内容】
本发明的目的在于提供一种基于协程机制的通讯方法。
本发明的技术方案如下:一种基于协程机制的通讯方法,包括如下步骤:
a、在主线程循环过程中,监听socket;
b、判断所述socket是否有输入数据,如果有,则执行步骤c;
c、对所述输入数据进行解码分析,并判断所述输入数据是请求数据或回应数据,如果是请求数据,则执行步骤d,如果是回应数据,则执行步骤e;
d、创建协程函数,并利用所述协程函数对所述请求数据进行处理;
e、根据所述回应数据查找与所述回应数据相对应的协程函数,并切换到所述协程函数处理所述回应数据。
在本发明实施例提供的基于协程机制的通讯方法中,每一所述协程函数对应一个用于设定所述协程函数的生命周期的定时器,且每一所述定时器中携带有用于定位相对应的所述协程函数的消息ID。
在本发明实施例提供的基于协程机制的通讯方法中,在步骤a中,采用select机制或者epoll机制来监听所述socket。
在本发明实施例提供的基于协程机制的通讯方法中,如果所述socket没有输入数据,则在步骤b中还包括执行超时消息处理步骤。
在本发明实施例提供的基于协程机制的通讯方法中,所述超时消息处理包括如下步骤:根据定时器事件到达的定时器所携带的消息ID定位超时的协程函数;切换到所述超时的协程函数进行超时消息处理;所述超时消息处理完成后,则切换到所述主线程继续循环,并返回步骤a。
在本发明实施例提供的基于协程机制的通讯方法中,在步骤d中,如果在所述请求数据的处理过程中需要发送处理数据,则所述步骤d还包括如下步骤:发送处理数据,保存所述协程函数,并建立携带有定位所述协程函数的消息ID的定时器;切换到所述主线程继续循环,并返回步骤a。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京贝伦思网络科技股份有限公司,未经南京贝伦思网络科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201610082073.9/2.html,转载请声明来源钻瓜专利网。