CN114356446B - 一种进程间事件的处理方法、装置、设备以及存储介质 - Google Patents
一种进程间事件的处理方法、装置、设备以及存储介质 Download PDFInfo
- Publication number
- CN114356446B CN114356446B CN202111619272.6A CN202111619272A CN114356446B CN 114356446 B CN114356446 B CN 114356446B CN 202111619272 A CN202111619272 A CN 202111619272A CN 114356446 B CN114356446 B CN 114356446B
- Authority
- CN
- China
- Prior art keywords
- kernel
- event
- target
- read
- connection
- 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.)
- Active
Links
Landscapes
- Debugging And Monitoring (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供一种进程间事件的处理方法、装置、设备以及存储介质,所述处理方法,包括:目标子进程在接收到内核返回的第二读就绪事件时,从所述管道套接字中读取到所述建立连接标识,根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接。未采用工作队列加锁的方式,节省了CPU的时间消耗。
Description
技术领域
本申请涉及计算机技术领域,具体而言,涉及一种进程间事件的处理方法、装置、设备以及存储介质。
背景技术
现有技术中,父进程负责监听,建立连接和封装http请求对象,将封装好http请求对象添加到共享的工作队列中,子进程负责从工作队列中取出http请求对象,解析http请求数据和构造http响应。
父进程和子进程共享工作队列,父进程往工作队列中添加http请求对象,以及,子进程从工作队列中取出http请求对象,都需要对工作队列加锁,增加CPU时间的消耗。
发明内容
基于此,提出一种进程间事件的处理方法、装置、设备以及存储介质。
第一方面,提供了一种进程间事件的处理方法,包括:
在内核检测到监听套接字中有监听数据时,内核向父进程返回第一读就绪事件,所述监听数据包括客户端请求建立连接的数据,父进程已预先将监听套接字上的第一读就绪事件注册到了父进程对应的epoll内核事件表中;
父进程在接收到内核返回的第一读就绪事件时,确定目标子进程,向父进程和目标子进程之间的管道中写入建立连接标识;
在内核检测到目标子进程中的管道套接字中有数据时,内核向所述目标子进程返回第二读就绪事件,目标子进程已预先将第二读就绪事件注册到了目标子进程对应的epoll内核事件表中;
目标子进程在接收到内核返回的第二读就绪事件时,从所述管道套接字中读取到所述建立连接标识,根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接。
上述进程间事件的处理方法,首先在内核检测到监听套接字中有监听数据时,内核向父进程返回第一读就绪事件,所述监听数据包括客户端请求建立连接的数据;然后父进程在接收到内核返回的第一读就绪事件时,确定目标子进程,向父进程和目标子进程之间的管道中写入建立连接标识;并且在内核检测到目标子进程中的管道套接字中有数据时,内核向所述目标子进程返回第二读就绪事件;最后目标子进程在接收到内核返回的第二读就绪事件时,从所述管道套接字中读取到所述建立连接标识,根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接。可见,上述进程间事件的处理方法未采用工作队列加锁的方式,节省了CPU的时间消耗,并且,现有技术中,每个子进程在同一时间只能处理一个http请求,如果http请求过多,而子进程又较少,则工作队列中会有较多的http请求得不到及时的处理,从而导致对客户端的响应速度变慢,而上述进程间事件的处理方法,采用了epoll的IO复用技术,一个子进程可以处理多个http请求,同时建立和多个客户端之间的连接,从而在一定程度上提高了对客户端的响应速度。
在一个实施例中,在所述根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接之后,还包括:在内核检测到目标子进程中的连接套接字中有数据时,内核向目标子进程返回第三读就绪事件,目标子进程已预先将连接套接字上的第三读就绪事件注册到了目标子进程对应的epoll内核事件表中;目标子进程在接收到内核返回的第三读就绪事件时,从所述连接套接字中读取http请求,构造所述http请求对应的http响应,将所述http响应写入所述连接套接字,以将所述http响应发送给所述客户端。
上述实施例,子进程负责处理http请求,由于采用了epoll的IO复用技术,子进程可以同时对多个http请求进行处理,构造多个http请求对应的http响应,从而在一定程度上提高了对客户端的响应速度。
在一个实施例中,在所述根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接之后,还包括:在内核检测到目标子进程中的连接套接字中有数据时,内核向目标子进程返回第三读就绪事件,目标子进程已预先将连接套接字上的第三读就绪事件注册到了目标子进程对应的epoll内核事件表中;目标子进程在接收到内核返回的第三读就绪事件时,从所述连接套接字中读取http请求,构造所述http请求对应的http响应,将所述连接套接字上的写就绪事件注册到目标子进程对应的epoll内核事件表中;在内核检测到写就绪事件时,向所述目标子进程返回所述写就绪事件;目标子进程在接收到内核返回的写就绪事件时,将所述http响应写入所述连接套接字,以将所述http响应发送给所述客户端。
上述实施例,套接字的缓冲区可能已经写满了,于是,注册写就绪事件到目标子进程对应的epoll内核事件表中,进而,在套接字的缓冲区还未写满的时候,再将http响应写入,在一定程度上防止读写错误。
在一个实施例中,进程间事件的处理方法,还包括:在目标子进程检测到发生读写错误时,将所述连接套接字的描述符从目标子进程对应的epoll内核事件表中删除,并且,关闭所述连接套接字。
上述实施例,由于发生了读写错误,因此,将连接套接字的描述符从目标子进程对应的epoll内核事件表中删除,并且,关闭连接套接字,以防止更多读写错误发生,并且,释放资源。
在一个实施例中,进程间事件的处理方法,还包括:在目标子进程检测到客户端关闭了连接时,将所述连接套接字的描述符从目标子进程对应的epoll内核事件表中删除,并且,关闭所述连接套接字。
上述实施例,由于客户端关闭了连接,因此,将连接套接字的描述符从目标子进程对应的epoll内核事件表中删除,并且,关闭连接套接字,以防止发生读写错误,并且,释放资源。
在一个实施例中,在所述在内核检测到监听套接字中有监听数据时,内核向所述父进程返回第一读就绪事件之前,还包括:创建包括多个子进程的进程池,所述多个子进程中包括所述目标子进程;建立父进程和进程池中的每个子进程之间的管道。
上述实施例,预先创建了进程池,并且建立了父进程和子进程之间的通信管道,以便后续父进程和子进程通信。
在一个实施例中,进程间事件的处理方法,还包括:若检测到父进程退出,则关闭父进程的全部套接字、子进程的全部套接字、父进程对应的epoll内核事件表和子进程对应的epoll内核事件表。
上述实施例,父进程退出时,关闭所有的套接字和epoll内核事件表,从而释放资源。
第二方面,提供了一种进程间事件的处理装置,包括:
数据监听模块,用于在内核检测到监听套接字中有监听数据时,内核向父进程返回第一读就绪事件,所述监听数据包括客户端请求建立连接的数据,父进程已预先将监听套接字上的第一读就绪事件注册到了父进程对应的epoll内核事件表中;
第一返回模块,用于父进程在接收到内核返回的第一读就绪事件时,确定目标子进程,向父进程和目标子进程之间的管道中写入建立连接标识;
第二返回模块,用于在内核检测到目标子进程中的管道套接字中有数据时,内核向所述目标子进程返回第二读就绪事件,目标子进程已预先将第二读就绪事件注册到了目标子进程对应的epoll内核事件表中;
连接建立模块,用于目标子进程在接收到内核返回的第二读就绪事件时,从所述管道套接字中读取到所述建立连接标识,根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接。
在一个实施例中,进程间事件的处理装置,还包括:第三返回模块,用于:在内核检测到目标子进程中的连接套接字中有数据时,内核向目标子进程返回第三读就绪事件,目标子进程已预先将连接套接字上的第三读就绪事件注册到了目标子进程对应的epoll内核事件表中;目标子进程在接收到内核返回的第三读就绪事件时,从所述连接套接字中读取http请求,构造所述http请求对应的http响应,将所述http响应写入所述连接套接字,以将所述http响应发送给所述客户端。
在一个实施例中,进程间事件的处理装置,还包括:写模块,用于:在内核检测到目标子进程中的连接套接字中有数据时,内核向目标子进程返回第三读就绪事件,目标子进程已预先将连接套接字上的第三读就绪事件注册到了目标子进程对应的epoll内核事件表中;目标子进程在接收到内核返回的第三读就绪事件时,从所述连接套接字中读取http请求,构造所述http请求对应的http响应,将所述连接套接字上的写就绪事件注册到目标子进程对应的epoll内核事件表中;在内核检测到写就绪事件时,向所述目标子进程返回所述写就绪事件;目标子进程在接收到内核返回的写就绪事件时,将所述http响应写入所述连接套接字,以将所述http响应发送给所述客户端。
在一个实施例中,进程间事件的处理装置,还包括:读写错误模块,用于:在目标子进程检测到发生读写错误时,将所述连接套接字的描述符从目标子进程对应的epoll内核事件表中删除,并且,关闭所述连接套接字。
在一个实施例中,进程间事件的处理装置,还包括:关闭模块,用于:在目标子进程检测到客户端关闭了连接时,将所述连接套接字的描述符从目标子进程对应的epoll内核事件表中删除,并且,关闭所述连接套接字。
在一个实施例中,进程间事件的处理装置,还包括:创建模块,用于:创建包括多个子进程的进程池,所述多个子进程中包括所述目标子进程;建立父进程和进程池中的每个子进程之间的管道。
在一个实施例中,进程间事件的处理装置,还包括:退出模块,用于:若检测到父进程退出,则关闭父进程的全部套接字、子进程的全部套接字、父进程对应的epoll内核事件表和子进程对应的epoll内核事件表。
第三方面,提供了一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上所述进程间事件的处理方法的步骤。
第四方面,提供了一种计算机可读存储介质,所述计算机可读取存储介质中存储有计算机程序指令,所述计算机程序指令被处理器读取并运行时,执行如上所述进程间事件的处理方法的步骤。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本申请的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。
图1为本申请实施例中进程间事件的处理方法的实现流程示意图;
图2为本申请实施例中进程间事件的处理装置的组成结构示意图;
图3为本申请实施例中计算机设备的内部结构框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在一个实施例中,提供了一种进程间事件的处理方法。本发明实施例所述的进程间事件的处理方法的执行主体为能够实现本发明实施例所述的进程间事件的处理方法的计算机设备,该计算机设备可以包括但不限于终端和服务器。其中,终端包括台式终端和移动终端,台式终端包括但不限于台式电脑和车载电脑;移动终端包括但不限于手机、平板、笔记本电脑和智能手表。服务器包括高性能计算机和高性能计算机集群。
在一个实施例中,如图1所示,提供了一种进程间事件的处理方法,包括:
步骤100,在内核检测到监听套接字中有监听数据时,内核向父进程返回第一读就绪事件,所述监听数据包括客户端请求建立连接的数据,父进程已预先将监听套接字上的第一读就绪事件注册到了父进程对应的epoll内核事件表中。
第一读就绪事件,为检测到监听套接字中有监听数据的事件,预先将监听套接字上的第一读就绪事件注册到父进程对应的epoll内核事件表中,于是,内核便可以对监听套接字上是否有监听数据进行监听,并在监听到监听套接字中有监听数据时,向父进程返回第一读就绪事件,其中,监听数据包括客户端请求建立连接的数据,例如,监听数据为客户端请求建立连接的报文。
步骤200,父进程在接收到内核返回的第一读就绪事件时,确定目标子进程,向父进程和目标子进程之间的管道中写入建立连接标识。
建立连接标识,用于指示目标子进程建立目标子进程和客户端之间的连接。父进程在接收到内核返回的第一读就绪事件时,确定监听套接字中有监听数据可读,于是,确定目标子进程,并向父进程和目标子进程之间的管道中写入建立连接标识,以便目标子进程对客户端请求建立连接的数据进行处理,即让目标子进程建立目标子进程与客户端之间的连接,其中,目标子进程,为进程池包含的多个子进程中的一个,例如,目标子进程是根据负载均衡算法从进程池包含的多个子进程中选择出来的一个负荷最小的子进程。
步骤300,在内核检测到目标子进程中的管道套接字中有数据时,内核向所述目标子进程返回第二读就绪事件,目标子进程已预先将第二读就绪事件注册到了目标子进程对应的epoll内核事件表中。
第二读就绪事件,为管道套接字中有数据可读的事件,预先将第二读就绪事件注册到了目标子进程对应的epoll内核事件表中,于是,在内核检测到目标子进程中的管道套接字中有数据可读时,内核向目标子进程返回第二读就绪事件,以便目标子进程去到管道套接字中读取数据。
步骤400,目标子进程在接收到内核返回的第二读就绪事件时,从所述管道套接字中读取到所述建立连接标识,根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接。
目标子进程在接收到内核返回的第二读就绪事件时,确定管道套接字中有数据可读,于是,从管道套接字中读取到建立连接标识,并且,根据建立连接标识建立目标子进程与客户端之间的连接,例如,目标子进程调用accept函数建立目标子进程和客户端之间的连接,以便在建立连接之后,目标子进程和客户端进行通信,客户端向目标子进程发送http请求。
上述进程间事件的处理方法,首先在内核检测到监听套接字中有监听数据时,内核向父进程返回第一读就绪事件,所述监听数据包括客户端请求建立连接的数据;然后父进程在接收到内核返回的第一读就绪事件时,确定目标子进程,向父进程和目标子进程之间的管道中写入建立连接标识;并且在内核检测到目标子进程中的管道套接字中有数据时,内核向所述目标子进程返回第二读就绪事件;最后目标子进程在接收到内核返回的第二读就绪事件时,从所述管道套接字中读取到所述建立连接标识,根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接。可见,上述进程间事件的处理方法未采用工作队列加锁的方式,节省了CPU的时间消耗,并且,现有技术中,每个子进程在同一时间只能处理一个http请求,如果http请求过多,而子进程又较少,则工作队列中会有较多的http请求得不到及时的处理,从而导致对客户端的响应速度变慢,而上述进程间事件的处理方法,采用了epoll的IO复用技术,一个子进程可以处理多个http请求,同时建立和多个客户端之间的连接,从而在一定程度上提高了对客户端的响应速度。
在一个实施例中,在步骤400所述根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接之后,还包括:
步骤500,在内核检测到目标子进程中的连接套接字中有数据时,内核向目标子进程返回第三读就绪事件,目标子进程已预先将连接套接字上的第三读就绪事件注册到了目标子进程对应的epoll内核事件表中。
第三读就绪事件,为检测到连接套接字中有数据可读的事件,由于目标子进程将连接套接字上的第三读就绪事件注册到了目标子进程对应的epoll内核事件表中,因此,在内核检测到目标子进程中的连接套接字中有数据时,内核便向目标子进程返回第三读就绪事件,以通知目标子进程去读取接套接字中的数据。
步骤600,目标子进程在接收到内核返回的第三读就绪事件时,从所述连接套接字中读取http请求,构造所述http请求对应的http响应,将所述http响应写入所述连接套接字,以将所述http响应发送给所述客户端。
由于目标子进程已经建立了和客户端之间的连接,所以,客户端便可以向目标子进程发送http请求了,于是,目标子进程在接收到内核返回的第三读就绪事件时,可以从连接套接字中读取到http请求,之后,目标子进程对http请求进行处理,构造http请求对应的http响应,在构造好http请求对应的http响应之后,将该http响应写入连接套接字,从而将该http响应发送给客户端。
上述实施例,子进程负责处理http请求,由于采用了epoll的IO复用技术,子进程可以同时对多个http请求进行处理,构造多个http请求对应的http响应,从而在一定程度上提高了对客户端的响应速度。
在一个实施例中,在步骤400所述根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接之后,还包括:
步骤700,在内核检测到目标子进程中的连接套接字中有数据时,内核向目标子进程返回第三读就绪事件,目标子进程已预先将连接套接字上的第三读就绪事件注册到了目标子进程对应的epoll内核事件表中。
步骤700和步骤500相同,在此不再详述。
步骤800,目标子进程在接收到内核返回的第三读就绪事件时,从所述连接套接字中读取http请求,构造所述http请求对应的http响应,将所述连接套接字上的写就绪事件注册到目标子进程对应的epoll内核事件表中。
步骤800中的“目标子进程在接收到内核返回的第三读就绪事件时,从所述连接套接字中读取http请求,构造所述http请求对应的http响应”和步骤600中的“目标子进程在接收到内核返回的第三读就绪事件时,从所述连接套接字中读取http请求,构造所述http请求对应的http响应”相同,在此不再详述。
其中,写就绪事件,为内核检测到连接套接字的缓冲区可写的事件,可以理解的是,当连接套接字的缓冲区写满时,不会产生写就绪事件,如果连接套接字的缓冲区写满了,仍然向连接套接字的缓冲区写入数据,可能发生读写错误,于是,目标子进程将写就绪事件注册到目标子进程对应的epoll内核事件表中,从而,在内核检测到连接套接字的缓冲区可写时,内核检测到写就绪事件,并向目标子进程返回写就绪事件,以通过目标子进程向连接套接字写入数据(具体是写入http请求)。
步骤900,在内核检测到写就绪事件时,向所述目标子进程返回所述写就绪事件。
由于通过步骤800将写就绪事件注册到了目标子进程对应的epoll内核事件表中,因此,在内核检测到写就绪事件时,会向目标子进程返回写就绪事件。
步骤1000,目标子进程在接收到内核返回的写就绪事件时,将所述http响应写入所述连接套接字,以将所述http响应发送给所述客户端。
目标子进程在接收到内核返回的写就绪事件时,将http响应写入连接套接字,从而将http响应发送给客户端,完成对http请求的响应。
上述实施例,套接字的缓冲区可能已经写满了,于是,注册写就绪事件到目标子进程对应的epoll内核事件表中,进而,在套接字的缓冲区还未写满的时候,再将http响应写入,在一定程度上防止读写错误。
在一个实施例中,进程间事件的处理方法,还包括:在目标子进程检测到发生读写错误时,将所述连接套接字的描述符从目标子进程对应的epoll内核事件表中删除,并且,关闭所述连接套接字。
目标子进程在运行过程中会调用内核提供的read函数,如果read函数向目标子进程返回的值是-1,则目标子进程可以检测到发生读写错误,于是,目标子进程调用内核提供的close函数,关闭连接套接字,并且,目标子进程调用内核提供的epoll_ctl函数,将连接套接字的描述符从目标子进程对应的epoll内核事件表中删除。
上述实施例,由于发生了读写错误,因此,将连接套接字的描述符从目标子进程对应的epoll内核事件表中删除,并且,关闭连接套接字,以防止更多读写错误发生,并且,释放资源。
在一个实施例中,进程间事件的处理方法,还包括:在目标子进程检测到客户端关闭了连接时,将所述连接套接字的描述符从目标子进程对应的epoll内核事件表中删除,并且,关闭所述连接套接字。
目标子进程在运行过程中会调用内核提供的read函数,如果read函数向目标子进程返回的值是0,则目标子进程可以检测到客户端关闭了客户端和目标子进程之间的连接,于是,目标子进程调用内核提供的close函数,关闭连接套接字,并且,目标子进程调用内核提供的epoll_ctl函数,将连接套接字的描述符从目标子进程对应的epoll内核事件表中删除。
上述实施例,由于客户端关闭了连接,因此,将连接套接字的描述符从目标子进程对应的epoll内核事件表中删除,并且,关闭连接套接字,以防止发生读写错误,并且,释放资源。
在一个实施例中,在步骤100所述在内核检测到监听套接字中有监听数据时,内核向所述父进程返回第一读就绪事件之前,还包括:创建包括多个子进程的进程池,所述多个子进程中包括所述目标子进程;建立父进程和进程池中的每个子进程之间的管道。
预先创建包含多个子进程的进程池,并且,多个子进程中包括目标子进程,后续便可以通过多个子进程对客户端发起的http请求进行处理。管道是一种用于父进程和子进程之间的通信技术,在创建好子进程之后,建立父进程和进程池中的每个子进程之间的管道,以便后续父进程和每个子进程通信。
上述实施例,预先创建了进程池,并且建立了父进程和子进程之间的通信管道,以便后续父进程和子进程通信。
在一个实施例中,进程间事件的处理方法,还包括:若检测到父进程退出,则关闭父进程的全部套接字、子进程的全部套接字、父进程对应的epoll内核事件表和子进程对应的epoll内核事件表。
例如,若用户关闭了父进程,则可以检测到父进程退出,于是,所有的套接字和epoll内核事件表均需要关闭,具体的,父进程调用内核提供的close函数,以关闭父进程的全部套接字,包括监听套接字,父进程继续调用内核提供的close函数,以关闭父进程对应的epoll内核事件表,子进程调用内核提供的close函数,以关闭子进程的全部套接字,包括连接套接字和管道套接字,子进程继续调用内核提供的close函数,以关闭子进程对应的epoll内核事件表。
上述实施例,父进程退出时,关闭所有的套接字和epoll内核事件表,从而释放资源。
在一个实施例中,如图2所示,提供了一种进程间事件的处理装置200,包括:
数据监听模块201,用于在内核检测到监听套接字中有监听数据时,内核向父进程返回第一读就绪事件,所述监听数据包括客户端请求建立连接的数据,父进程已预先将监听套接字上的第一读就绪事件注册到了父进程对应的epoll内核事件表中;
第一返回模块202,用于父进程在接收到内核返回的第一读就绪事件时,确定目标子进程,向父进程和目标子进程之间的管道中写入建立连接标识;
第二返回模块203,用于在内核检测到目标子进程中的管道套接字中有数据时,内核向所述目标子进程返回第二读就绪事件,目标子进程已预先将第二读就绪事件注册到了目标子进程对应的epoll内核事件表中;
连接建立模块204,用于目标子进程在接收到内核返回的第二读就绪事件时,从所述管道套接字中读取到所述建立连接标识,根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接。
在一个实施例中,进程间事件的处理装置200,还包括:第三返回模块,用于:在内核检测到目标子进程中的连接套接字中有数据时,内核向目标子进程返回第三读就绪事件,目标子进程已预先将连接套接字上的第三读就绪事件注册到了目标子进程对应的epoll内核事件表中;目标子进程在接收到内核返回的第三读就绪事件时,从所述连接套接字中读取http请求,构造所述http请求对应的http响应,将所述http响应写入所述连接套接字,以将所述http响应发送给所述客户端。
在一个实施例中,进程间事件的处理装置200,还包括:写模块,用于:在内核检测到目标子进程中的连接套接字中有数据时,内核向目标子进程返回第三读就绪事件,目标子进程已预先将连接套接字上的第三读就绪事件注册到了目标子进程对应的epoll内核事件表中;目标子进程在接收到内核返回的第三读就绪事件时,从所述连接套接字中读取http请求,构造所述http请求对应的http响应,将所述连接套接字上的写就绪事件注册到目标子进程对应的epoll内核事件表中;在内核检测到写就绪事件时,向所述目标子进程返回所述写就绪事件;目标子进程在接收到内核返回的写就绪事件时,将所述http响应写入所述连接套接字,以将所述http响应发送给所述客户端。
在一个实施例中,进程间事件的处理装置200,还包括:读写错误模块,用于:在目标子进程检测到发生读写错误时,将所述连接套接字的描述符从目标子进程对应的epoll内核事件表中删除,并且,关闭所述连接套接字。
在一个实施例中,进程间事件的处理装置200,还包括:关闭模块,用于:在目标子进程检测到客户端关闭了连接时,将所述连接套接字的描述符从目标子进程对应的epoll内核事件表中删除,并且,关闭所述连接套接字。
在一个实施例中,进程间事件的处理装置,还包括:创建模块,用于:创建包括多个子进程的进程池,所述多个子进程中包括所述目标子进程;建立父进程和进程池中的每个子进程之间的管道。
在一个实施例中,进程间事件的处理装置200,还包括:退出模块,用于:若检测到父进程退出,则关闭父进程的全部套接字、子进程的全部套接字、父进程对应的epoll内核事件表和子进程对应的epoll内核事件表。
在一个实施例中,如图3所示,提供了一种计算机设备,该计算机设备具体可以是终端或服务器。该计算机设备包括通过***总线连接的处理器、存储器和网络接口,存储器包括非易失性存储介质和内存储器,该计算机设备的非易失性存储介质存储有操作***,还可存储有计算机程序,该计算机程序被处理器执行时,可使得处理器实现进程间事件的处理方法。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。该内存储器中也可储存有计算机程序,该计算机程序被处理器执行时,可使得处理器执行进程间事件的处理方法。本领域技术人员可以理解,图3中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
本申请提供的进程间事件的处理方法可以实现为一种计算机程序的形式,计算机程序可在如图3所示的计算机设备上运行。计算机设备的存储器中可存储组成进程间事件的处理装置的各个程序模板。比如,数据监听模块201、第一返回模块202和第二返回模块203。
一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如下步骤:
在内核检测到监听套接字中有监听数据时,内核向父进程返回第一读就绪事件,所述监听数据包括客户端请求建立连接的数据,父进程已预先将监听套接字上的第一读就绪事件注册到了父进程对应的epoll内核事件表中;
父进程在接收到内核返回的第一读就绪事件时,确定目标子进程,向父进程和目标子进程之间的管道中写入建立连接标识;
在内核检测到目标子进程中的管道套接字中有数据时,内核向所述目标子进程返回第二读就绪事件,目标子进程已预先将第二读就绪事件注册到了目标子进程对应的epoll内核事件表中;
目标子进程在接收到内核返回的第二读就绪事件时,从所述管道套接字中读取到所述建立连接标识,根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接。
在一个实施例中,提供了一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行以下步骤:
在内核检测到监听套接字中有监听数据时,内核向父进程返回第一读就绪事件,所述监听数据包括客户端请求建立连接的数据,父进程已预先将监听套接字上的第一读就绪事件注册到了父进程对应的epoll内核事件表中;
父进程在接收到内核返回的第一读就绪事件时,确定目标子进程,向父进程和目标子进程之间的管道中写入建立连接标识;
在内核检测到目标子进程中的管道套接字中有数据时,内核向所述目标子进程返回第二读就绪事件,目标子进程已预先将第二读就绪事件注册到了目标子进程对应的epoll内核事件表中;
目标子进程在接收到内核返回的第二读就绪事件时,从所述管道套接字中读取到所述建立连接标识,根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接。
需要说明的是,上述进程间事件的处理方法、进程间事件的处理装置、计算机设备及计算机可读存储介质属于一个总的发明构思,进程间事件的处理方法、进程间事件的处理装置、计算机设备及计算机可读存储介质实施例中的内容可相互适用。
在本申请所提供的实施例中,应该理解到,所揭露装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合或者可以集成到另一个***,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
另外,作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
再者,在本申请各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。
以上所述仅为本申请的实施例而已,并不用于限制本申请的保护范围,对于本领域的技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。
Claims (8)
1.一种进程间事件的处理方法,其特征在于,包括:
在内核检测到监听套接字中有监听数据时,内核向父进程返回第一读就绪事件,所述监听数据包括客户端请求建立连接的数据,父进程已预先将监听套接字上的第一读就绪事件注册到了父进程对应的epoll内核事件表中;
父进程在接收到内核返回的第一读就绪事件时,确定目标子进程,向父进程和目标子进程之间的管道中写入建立连接标识;
在内核检测到目标子进程中的管道套接字中有数据时,内核向所述目标子进程返回第二读就绪事件,目标子进程已预先将第二读就绪事件注册到了目标子进程对应的epoll内核事件表中;
目标子进程在接收到内核返回的第二读就绪事件时,从所述管道套接字中读取到所述建立连接标识,根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接;
在所述根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接之后,还包括:
在内核检测到目标子进程中的连接套接字中有数据时,内核向目标子进程返回第三读就绪事件,目标子进程已预先将连接套接字上的第三读就绪事件注册到了目标子进程对应的epoll内核事件表中;
目标子进程在接收到内核返回的第三读就绪事件时,从所述连接套接字中读取http请求,构造所述http请求对应的http响应,将所述连接套接字上的写就绪事件注册到目标子进程对应的epoll内核事件表中;
在内核检测到写就绪事件时,向所述目标子进程返回所述写就绪事件;
目标子进程在接收到内核返回的写就绪事件时,将所述http响应写入所述连接套接字,以将所述http响应发送给所述客户端。
2.根据权利要求1所述的处理方法,其特征在于,还包括:
在目标子进程检测到发生读写错误时,将所述连接套接字的描述符从目标子进程对应的epoll内核事件表中删除,并且,关闭所述连接套接字。
3.根据权利要求1所述的处理方法,其特征在于,还包括:
在目标子进程检测到客户端关闭了连接时,将所述连接套接字的描述符从目标子进程对应的epoll内核事件表中删除,并且,关闭所述连接套接字。
4.根据权利要求1所述的处理方法,其特征在于,在所述在内核检测到监听套接字中有监听数据时,内核向所述父进程返回第一读就绪事件之前,还包括:
创建包括多个子进程的进程池,所述多个子进程中包括所述目标子进程;
建立父进程和进程池中的每个子进程之间的管道。
5.根据权利要求4所述的处理方法,其特征在于,还包括:
若检测到父进程退出,则关闭父进程的全部套接字、子进程的全部套接字、父进程对应的epoll内核事件表和子进程对应的epoll内核事件表。
6.一种进程间事件的处理装置,其特征在于,包括:
数据监听模块,用于在内核检测到监听套接字中有监听数据时,内核向父进程返回第一读就绪事件,所述监听数据包括客户端请求建立连接的数据,父进程已预先将监听套接字上的第一读就绪事件注册到了父进程对应的epoll内核事件表中;
第一返回模块,用于父进程在接收到内核返回的第一读就绪事件时,确定目标子进程,向父进程和目标子进程之间的管道中写入建立连接标识;
第二返回模块,用于在内核检测到目标子进程中的管道套接字中有数据时,内核向所述目标子进程返回第二读就绪事件,目标子进程已预先将第二读就绪事件注册到了目标子进程对应的epoll内核事件表中;
连接建立模块,用于目标子进程在接收到内核返回的第二读就绪事件时,从所述管道套接字中读取到所述建立连接标识,根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接;在所述根据所述建立连接标识建立所述目标子进程与所述客户端之间的连接之后,还包括:
在内核检测到目标子进程中的连接套接字中有数据时,内核向目标子进程返回第三读就绪事件,目标子进程已预先将连接套接字上的第三读就绪事件注册到了目标子进程对应的epoll内核事件表中;
目标子进程在接收到内核返回的第三读就绪事件时,从所述连接套接字中读取http请求,构造所述http请求对应的http响应,将所述连接套接字上的写就绪事件注册到目标子进程对应的epoll内核事件表中;
在内核检测到写就绪事件时,向所述目标子进程返回所述写就绪事件;
目标子进程在接收到内核返回的写就绪事件时,将所述http响应写入所述连接套接字,以将所述http响应发送给所述客户端。
7.一种计算机设备,其特征在于,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如权利要求1至5任一项所述进程间事件的处理方法的步骤。
8.一种计算机可读存储介质,其特征在于,所述计算机可读取存储介质中存储有计算机程序指令,所述计算机程序指令被处理器读取并运行时,执行权利要求1至5任一项所述进程间事件的处理方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111619272.6A CN114356446B (zh) | 2021-12-27 | 2021-12-27 | 一种进程间事件的处理方法、装置、设备以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111619272.6A CN114356446B (zh) | 2021-12-27 | 2021-12-27 | 一种进程间事件的处理方法、装置、设备以及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN114356446A CN114356446A (zh) | 2022-04-15 |
CN114356446B true CN114356446B (zh) | 2023-08-22 |
Family
ID=81103340
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111619272.6A Active CN114356446B (zh) | 2021-12-27 | 2021-12-27 | 一种进程间事件的处理方法、装置、设备以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114356446B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114756180B (zh) * | 2022-06-15 | 2022-12-09 | 广东睿江云计算股份有限公司 | 覆盖写入数据块分配方法、装置、计算机设备及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103384274A (zh) * | 2013-07-15 | 2013-11-06 | 浙江大学 | 基于http协议的公网连接内网计算机的通信方法 |
CN103746977A (zh) * | 2013-12-27 | 2014-04-23 | 东软熙康健康科技有限公司 | 一种Linux服务器的连接方法和装置 |
CN110413386A (zh) * | 2019-06-27 | 2019-11-05 | 深圳市富途网络科技有限公司 | 多进程处理方法、装置、终端设备及计算机可读存储介质 |
CN111061474A (zh) * | 2018-10-16 | 2020-04-24 | 深圳市茁壮网络股份有限公司 | 一种Lamda编程模型及其数据处理方法 |
CN111309458A (zh) * | 2019-07-12 | 2020-06-19 | 北京关键科技股份有限公司 | 一种多节点任务异步协同处理方法 |
CN111625326A (zh) * | 2020-05-13 | 2020-09-04 | 北京字节跳动网络技术有限公司 | 任务管线执行方法、装置及电子设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8161544B2 (en) * | 2006-07-19 | 2012-04-17 | Microsoft Corporation | Trusted communications with child processes |
-
2021
- 2021-12-27 CN CN202111619272.6A patent/CN114356446B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103384274A (zh) * | 2013-07-15 | 2013-11-06 | 浙江大学 | 基于http协议的公网连接内网计算机的通信方法 |
CN103746977A (zh) * | 2013-12-27 | 2014-04-23 | 东软熙康健康科技有限公司 | 一种Linux服务器的连接方法和装置 |
CN111061474A (zh) * | 2018-10-16 | 2020-04-24 | 深圳市茁壮网络股份有限公司 | 一种Lamda编程模型及其数据处理方法 |
CN110413386A (zh) * | 2019-06-27 | 2019-11-05 | 深圳市富途网络科技有限公司 | 多进程处理方法、装置、终端设备及计算机可读存储介质 |
CN111309458A (zh) * | 2019-07-12 | 2020-06-19 | 北京关键科技股份有限公司 | 一种多节点任务异步协同处理方法 |
CN111625326A (zh) * | 2020-05-13 | 2020-09-04 | 北京字节跳动网络技术有限公司 | 任务管线执行方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN114356446A (zh) | 2022-04-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108038039B (zh) | 记录日志的方法及微服务*** | |
US12001450B2 (en) | Distributed table storage processing method, device and system | |
CN114356446B (zh) | 一种进程间事件的处理方法、装置、设备以及存储介质 | |
CN113535425A (zh) | 一种数据发送方法、装置、电子设备及存储介质 | |
CN114760233B (zh) | 业务处理方法、装置、电子设备及存储介质 | |
CN111966653A (zh) | 微服务调用链路数据处理方法、装置、服务器及存储介质 | |
CN111522706A (zh) | 前端应用的页面异常的监控方法及其装置 | |
CN114637611A (zh) | 基于消息队列的信息处理方法、装置及计算机设备 | |
CN111414263A (zh) | 一种信息处理方法、装置、服务器及存储介质 | |
CN111159298B (zh) | 业务请求处理方法、装置、电子设备及存储介质 | |
CN108241616B (zh) | 消息推送方法和装置 | |
CN116633616A (zh) | 数据访问方法、***、设备及存储介质 | |
CN107291628B (zh) | 访问数据存储设备的方法和装置 | |
CN114116676A (zh) | 数据迁移方法、装置、电子设备及计算机可读存储介质 | |
CN110764995B (zh) | 一种检测文件访问异常的方法、装置、介质和电子设备 | |
CN108959405B (zh) | 数据的强一致性读取方法及终端设备 | |
CN111459819A (zh) | 软件测试方法及装置、电子设备、计算机可读介质 | |
CN112231290A (zh) | 一种本地日志的处理方法、装置、设备及存储介质 | |
CN112350921A (zh) | 消息处理方法、终端及存储介质 | |
CN114050991B (zh) | 测试代理的方法、装置、设备以及存储介质 | |
CN110874238A (zh) | 一种线上业务更新方法及其装置 | |
CN114691318A (zh) | 一种数据排队处理方法、装置、终端及存储介质 | |
CN116955287A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN115756952A (zh) | 微服务网关管理方法、***、计算机设备和存储介质 | |
CN116028160A (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 |