CN111327639A - 一种套接字通信方法及装置 - Google Patents
一种套接字通信方法及装置 Download PDFInfo
- Publication number
- CN111327639A CN111327639A CN202010195706.3A CN202010195706A CN111327639A CN 111327639 A CN111327639 A CN 111327639A CN 202010195706 A CN202010195706 A CN 202010195706A CN 111327639 A CN111327639 A CN 111327639A
- Authority
- CN
- China
- Prior art keywords
- socket
- server
- message
- standby
- master
- 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L41/00—Arrangements for maintenance, administration or management of data switching networks, e.g. of packet switching networks
- H04L41/06—Management of faults, events, alarms or notifications
- H04L41/0654—Management of faults, events, alarms or notifications using network fault recovery
- H04L41/0663—Performing the actions predefined by failover planning, e.g. switching to standby network elements
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Computer And Data Communications (AREA)
- Hardware Redundancy (AREA)
Abstract
本发明提出了一种套接字通信方法,包括以下步骤:基础框架运行:创建一组进程,所述进程称为套接字代理,所述套接字代理用于实现套接字代理与客户端和服务端的连接和通信,所述服务端为两个,套接字代理还用于实现两个服务端之间的主备切换。本发明通过主、备服务端切换实现客户端与服务端的通信、异常保护、内存泄漏保护以及业务不中断升级。
Description
技术领域
本发明涉及通信技术领域,特别涉及一种套接字通信方法及装置。
背景技术
为了支持用户开发面向应用的通信程序,大部分操作系统都提供了一组基于TCP或者UDP的应用程序编程接口(API),该接口通常以一组函数的形式出现,也称为套接字(Socket)。
通常情况下,互相通信的客户端和服务端程序是不同的进程,其通过套接字接口完成业务数据的接收和发送。当客户端和服务端程序出现异常或退出时,其对应的套接字的数据收发就会出现异常,需要重新建立连接再进行相关的初始化处理才能继续。
重新建立连接并初始化处理的时间一般称之为业务中断时间。随着TCP/IP协议栈深入到生活和生产活动的方方面面,业务中断对应的经济成本越来越高。
发明内容
为解决上述问题,本发明提出了一种套接字通信方法,包括以下步骤:
基础框架运行:创建一组进程,所述进程称为套接字代理,所述套接字代理用于实现套接字代理与客户端和服务端的连接和通信,所述服务端为两个,套接字代理还用于实现两个服务端之间的主备切换;
套接字代理与客户端和服务端建立连接的过程具体为:
套接字代理作为独立的程序启动,等待服务端及客户端与其建立连接;
服务端启动,其根据输入信息或者配置文件获得套接字代理的进程间通信地址,通过进程间通信通道与套接字代理建立连接;
客户端启动,创建客户端套接字并与套接字代理建立连接;
套接字代理向服务端发送新建的客户端的连接信息,所述新建的客户端的连接信息包含新建的客户端的IP地址、端口号和所属通道号;
服务端解析新建的客户端的连接信息;
套接字代理与客户端和服务器进行通信的过程具体为:
客户端发送报文给套接字代理;
套接字代理接收报文并向服务端发送包含报文和报文所属通道号的业务消息;
服务端解析并处理业务消息,包括对报文进行处理并获得报文的处理结果;服务端向套接字代理发送处理后的业务消息,所述处理后的业务消息包含报文的所属通道号和报文的处理结果;
套接字代理接收和解析服务端发送的业务消息,根据报文的所属通道号找到对应的连接,将报文的处理结果发送给客户端;
客户端接收报文的处理结果;
套接字代理实现两个服务端之间的主备切换的过程具体为;
套接字代理对两个服务端进行状态设置,设置两个服务端的状态为一“主”一“备”;状态为“主”的服务端为主服务端,状态为“备”的服务端为备服务端;
当需要进行两个服务端之间的主备切换时,套接字代理将主服务端的状态设置为“备”,将备服务端的状态设置为“主”,以进行主、备服务端切换。
进一步地,套接字代理在服务端异常的情况下进行主备切换以实现异常保护,具体为:
主服务端和备服务端定时向套接字代理发送保活报文;
套接字代理通过保活报文判断主服务端和备服务端是否处于正常状态,若主服务端不正常而备服务端正常,则进行主、备服务端切换。
进一步地,所述判断主服务端和备服务端是否处于正常状态具体为:如套接字代理没有在预设时间内收到主服务端或备服务端的保活报文,则认定主服务端或备服务端不正常,如能够在预设时间内收到主服务端或备服务端的保活报文,则认定主服务端或备服务端正常。
进一步地,套接字代理判断主服务端异常时先重新启动主服务端,若重新启动成功,则维持主、备服务端的状态不变,否则进行主、备服务端切换。
进一步地,套接字代理将最先与套接字代理建立连接的服务端设置为初始的主服务端。
进一步地,套接字代理根据配置文件指定初始的主服务端。
进一步地,套接字代理还在服务端内存泄漏的情况下进行主备切换以实现内存泄漏保护,具体为:
设初始的主服务端为服务端a,初始的备服务端为服务端b;
客户端向套接字代理发送报文;
套接字代理接收报文并将其封装进业务消息中,将业务消息发送给服务端a;
服务端a解析并处理业务消息,将业务消息的处理结果发送给套接字代理;服务端a将业务消息的处理结果存储至本服务端的自身存储区域,向套接字代理发送携带业务消息处理结果的主备同步消息;
套接字代理接收业务消息的处理结果,将解析后的业务消息的处理结果发送给客户端;套接字代理接收并解析携带业务消息处理结果的主备同步消息,将解析后的业务消息的处理结果作为主备同步数据发送给服务端b;
套接字代理判断主、备服务端切换满足预设时间或预设次数后,向服务端a发送值为空且携带“最后”标记的主备同步消息;
服务端a值为空且携带“最后”标记的主备同步消息,检查主备同步数据是否完全同步,若是则发送携带“最后”标记的主备同步消息给套接字代理;若否则发送携带未同步的主备同步数据的主备同步消息进行同步;服务端a和服务端b通过套接字代理重复同步处理流程直到完全同步;
套接字解析携带“最后”标记的主备同步消息,发送退出消息给服务端a并设置服务端b的状态为“主”;
第三服务端启动,第三服务端与套接字代理通过进程间通信通道建立连接;
套接字将第三服务端的状态设置为“备”;
套接字代理向服务端b发送携带主备同步请求的主备同步消息;
服务端b接收携带主备同步请求的主备同步消息后启动同步处理流程,向套接字代理发送携带未同步的主备同步数据的主备同步消息;
套接字代理接收和解析携带未同步的主备同步数据的主备同步消息后将其发送给第三服务端;
第三服务端解析未同步的主备同步数据,存储解析后的未同步的主备同步数据到自身存储区域进行同步,服务端b和第三服务端重复同步处理流程直到完全同步;
所述第三服务端为内存泄漏后重新启动的服务端a或新启动的服务端。
进一步地,套接字代理在服务端业务不中断的情况下进行主备切换以升级服务端,具体为:
套接字代理向主服务端发送携带主备同步请求的主备同步消息;
主服务端解析接收到的携带主备同步请求的主备同步消息后,启动同步处理流程,向套接字代理发送携带未同步的主备同步数据的主备同步消息;
套接字代理收到携带未同步的主备同步数据的主备同步消息后发送给备服务端;
备服务端解析携带未同步的主备同步数据的主备同步消息,将解析出的未同步的主备同步数据存储到自身存储区域;
主服务端的同步处理流程结束,向套接字代理发送携带“最后”标记的主备同步消息;
套接字代理解析携带“最后”标记的主备同步消息,发现“最后”标记,进行主、备服务端切换;
客户端向套接字代理发送报文;
套接字代理接收报文后将报文发送给主服务端。
本发明还提供了一种套接字通信装置,包括客户端和服务端,还包括一组进程,所述进程称为套接字代理;所述服务端为两个,套接字代理还用于实现两个服务端之间的主备切换;套接字代理通过上述任一套接字通信方法与客户端和服务端建立连接并进行通信。
本发明与现有技术相比,有益效果在于:
(1)当服务端或者客户端出现异常时,由套接字代理将后续的报文数据发送给备服务端或者客户端,减少了业务中断时间;
(2)当服务端或者客户端进行升级或者满足特定条件后倒换,由套接字代理协调主备服务端或者客户端的倒换,在一定条件下报文数据零丢包,即业务不中断;
(3)当服务端程序需要长时间运行而其程序出现内存泄漏的情况下,可以通过定时倒换主备服务端,完成其内存的清洗,降低了高稳定性服务端程序开发的难度。
附图说明
图1为本发明套接字代理的组网示例之一。
图2为本发明套接字代理的组网示例之二。
图3为本发明套接字代理的组网示例之三。
图4为本发明实施例1的组网拓扑。
图5为本发明实施例1的通信交互流程图。
图6为本发明实施例2组网拓扑。
图7为本发明实施例2的通信交互流程图。
图8为本发明实施例3内存泄漏保护操作之后的组网拓扑。
图9为本发明实施例3的通信交互流程图。
图10为本发明实施例4组网拓扑。
图11为本发明实施例4的通信交互流程图。
图12为本发明实施例4中增加套接字代理命令行接口后的组网拓扑。
具体实施方式
在本公开中参照附图来描述本发明的各方面,附图中示出了许多说明的实施例。本公开的实施例不必定意在包括本发明的所有方面。应当理解,上面介绍的多种构思和实施例,以及下面更加详细地描述的那些构思和实施方式可以以很多方式中任意一种来实施,这是因为本发明所公开的构思和实施例并不限于任何实施方式。另外,本发明公开的一些方面可以单独使用,或者与本发明公开的其他方面的任何适当组合来使用。
本发明具体实施时需要创建一组称为套接字代理这个软件进程,其可以根据实际需要与服务端软件一起部署(如图1所示),或者与客户端软件一起部署(如图2所示),或者在客户端和服务端都部署(如图3所示)。
套接字代理与客户端或者服务端的连接一般通过进程间通信完成,即可以是管道、socket、或者消息队列等。也就是说引入了套接字代理之后,服务端或客户端不再直接调用TCP/UDP的套接字接口进行端口号的绑定(bind),端口监听(listen),连接创建(accept)等,而是通过套接字代理完成这些,服务端或者客户端只是通过进程间通信通道收发套接字代理的消息完成业务处理。
为进一步说明本发明,下面几个实施例基于my_eval程序分别从实现基本功能、异常保护、内存泄漏保护以及业务不中断升级的角度具体描述了本发明的实现流程。
实施例所述my_eval程序具有如下功能:能通过TCP/IP网络接收客户端输入的字符串,解析字符串后进行计算并返回结果。比如依次输入如下的几个字符串,1)“a=100”,2)“b=200”,3)“c=a+b”,4)“d=c*100”,其对应返回的结果为,1)“100”,2)“200”,3)“300”,4)“30000”。所述服务端程序命名为my_eval服务端,其对应客户端为my_eval客户端,套接字代理和my_eval服务端一起部署,如图4所示。下面结合附图对实施例1-4做详细描述。
实施例1
本实施例描述my_eval程序基于套接字代理实现其基本功能的方法和流程。
套接字代理程序作为一个独立的TCP服务端程序,my_eval服务端程序通过进程间通信通道与套接字代理程序建立连接,my_eval客户端程序作为一个普通的TCP客户端程序通过IP网络与套接字代理程序建立TCP连接,具体流程如图5所示。
实现my_eval程序功能流程如下:
步骤A1:套接字代理作为独立的TCP服务端程序启动,等待my_eval服务端及客户端与其建立连接;
步骤A2:my_eval服务端启动,其根据用户输入或者配置文件获得套接字代理的进程间通信地址,通过进程间通信地址与套接字代理建立连接;
步骤A3:my_eval客户端启动,创建TCP客户端套接字并与套接字代理建立TCP连接;
步骤A4:套接字代理通过进程间通信通道向my_eval服务端发送客户端新建消息,告知当前新建的客户端的TCP连接信息,一般包含对端(my_eval客户端)的IP地址、端口号和所属通道号;
步骤A5:my_eval服务端解析新建的客户端的TCP连接信息,进行字符串计算的预处理;
步骤A6:my_eval客户端接收用户输入的字符串并通过TCP连接发送到套接字代理;
步骤A7:套接字代理通过进程间通信通道向my_eval服务端发送业务消息,告知当前接收到的字符串以及所属通道号;
步骤A8:my_eval服务端解析业务消息,取出通道号和字符串进行相应处理;
步骤A9:my_eval服务端通过进程间通信通道向套接字代理发送业务处理完成消息,告知对应通道号的字符串计算结果;
步骤A10:套接字代理通过进程间通信通道接收业务处理完成消息,解析出通道号和字符串计算结果,根据通道号找到对应的TCP连接,将字符串计算发送给my_eval客户端;
步骤A11:my_eval客户端从TCP连接接收到字符串的计算结果并并将计算结果向用户展示。
实施例2
本实施例描述my_eval基于套接字代理实现异常保护特性时的方法。
为了提高my_eval程序的可靠性和可用性,在my_eval服务端引入套接字代理,并且启动两个my_eval服务端,其中my_eval服务端a为主服务端,my_eval服务端b为备服务端,组网拓扑如图6所示。
主、备my_eval服务端都通过进程间通信通道与套接字代理建立连接。一般情况下,先建立连接的为主服务端,后建立连接的为备服务端。也可以在my_eval服务端启动时由用户或者配置指定当前启动的服务端为主或者备。套接字代理同时维护与my_eval主、备服务端的连接,主、备服务端定时向套接字代理发送保活报文,套接字代理通过保活报文判断当前主、备服务端是否处于正常状态,若主服务端不正常而备服务端正常,则进行主、备服务端切换。套接字代理从网络侧接收到的由客户端输入的字符串只发送给主服务端进行处理。
假设my_eval服务端实现有bug,若接收到类似“e=100/0”这样的字符串时,其会有除零异常并退出。如图7所示,在引入套接字代理和主、备服务端之后,对于这样的异常,其保护流程如下:
步骤B1:套接字代理作为独立的TCP服务端程序启动,等待my_eval服务端及客户端与其建立连接;
步骤B2:my_eval服务端a启动并与套接字代理建立连接,其状态为“主”;
步骤B3:my_eval服务端b启动并与套接字代理建立连接,其状态为“备”;
步骤B4:my_eval服务端a发送保活报文到套接字代理,代理维护服务端a的状态正常;
步骤B5:my_eval服务端b发送保活报文到套接字代理,代理维护服务端b的状态正常;
步骤B6:my_eval客户端发送字符串“a=100/0”到套接字代理;
步骤B7:套接字代理将字符串“a=100/0”这个报文数据封装到消息中,通过进程间通信通道发送给my_eval服务端a;
步骤B8:my_eval服务端a解析业务消息,处理“a=100/0”字符串时异常退出;
步骤B9:套接字代理没有收到my_eval服务端a的保活报文,判断my_eval服务端a异常,将my_eval服务端b设置为“主”;
步骤B10:my_eval客户端发送字符串“a=100/10”到套接字代理;
步骤B11:套接字代理将字符串“a=100/10”这个报文数据封装到消息中,通过进程间通信通道发送给my_eval服务端b;
步骤B12:my_eval服务端b解析业务消息,处理”a=100/10”字符串并将结果发送给套接字代理;
步骤B13:套接字代理将结果通过TCP连接发送给my_eval客户端;
为了提高程序的健壮性,套接字代理也可以在检测到服务端a异常之后,尝试启动服务端a。
实施例3
本实施例描述my_eval基于套接字代理实现内存泄漏保护特性时的方法。
假设my_eval服务端程序有内存泄漏的bug,而且由于某些原因不能在短时间内解决这个bug,为此在my_eval服务端引入套接字代理,并且启动两个my_eval服务端,一个为主一个为备。当主my_eval服务端运行达到一定的时长或者次数,则启动主备切换,并且发消息让原来的主my_eval服务端退出后再重新启动,这样原来主my_eval服务端泄漏的内存通过进程退出就释放给了系统。假设之前已经输入了“a=100+100”,“b=200-10”这样的字符串,那么为了新的主my_eval服务端程序能够正确处理类似“c=a+b”这样的字符串,在主备切换前,需要两个my_eval服务端同步数据,即主my_eval服务端通过套接字代理将“a=200”,“b=190”这样的信息同步给备my_eval服务端。
该实施例组网图同实施例2的相同,可参考图6。在完成一次内存泄漏保护倒换后,新的组网拓扑如图8所示。
其中my_eval服务端b状态已经设置为“主”,而原来内存泄漏的my_eval服务端a则已经退出,这样其泄漏的内存也就通过进程退出完成到系统的释放。套接字代理为了对my_eval服务端b内存泄漏做同样的操作,所以新启动my_eval服务端c,然后通知my_eval服务端b向my_eval服务端c同步主备数据,具体流程如图9所示。
内存泄漏保护特性实现的流程如下:
步骤C1:套接字代理作为独立的TCP服务端程序启动,等待my_eval服务端及客户端与其建立连接;
步骤C2:my_eval服务端a启动并与套接字代理建立连接,其状态为”主“;
步骤C3:my_eval服务端b启动并与套接字代理建立连接,其状态为”备“;
步骤C4:my_eval客户端发送字符串“a=100+100”到套接字代理;
步骤C5:套接字代理将字符串“a=100+100”这个报文数据封装到消息中,通过进程间通信通道发送给my_eval服务端a;
步骤C6.1:my_eval服务端a解析业务消息,处理“a=100+100”字符串,并将处理结果发送给套接字代理;
步骤C6.2:my_eval服务端a存储“a=200”这样的信息到本程序内存,并且向套接字代理发送主备同步数据,将“a=200”这样的同步信息发送给套接字代理;
步骤C7.1:套接字代理解析处理结果,并将结果通过TCP连接发送给my_eval客户端;
步骤C7.2:套接字代理解析主备同步数据,将“a=200”这样的同步信息发送给my_eval服务端b;
步骤C8:重复步骤C4~C7,完成字符串“b=200-10”的处理和主备同步;
步骤C9:套接字代理判断主备倒换时长条件满足,向my_eval服务端a发送一个空字符串的业务消息,并且业务消息携带“最后”标记;
步骤C10:my_eval服务端a解析业务消息,发现其有“最后”标记,则进行检查是否有未同步的主备数据,有则发送主备数据同步消息进行同步,没有则发送同步消息,并携带“最后”标记;
步骤C11:套接字代理解析主备同步数据消息,发现有“最后”标记,则设置my_eval服务端a的状态为“备”,同时设置my_eval服务端b的状态为“主”;
步骤C12:套接字代理发送退出消息给my_eval服务端a,然后再重新启动my_eval服务端c;
步骤C13:my_eval服务端c启动后与套接字代理通过进程间通信通道建立连接,获取状态为“备”;
步骤C14:套接字代理向my_eval服务端b发送主备同步请求消息;
步骤C15:my_eval服务端b收到主备同步请求消息后,启动主备数据同步处理流程,向套接字代理发送主备同步数据;
步骤C16:套接字代理收到主备同步数据消息后发送给my_eval服务端c;
步骤C17:my_eval服务端c解析主备同步数据,存储“a=200”,“b=190”这样的信息到自身存储区域。
实施例4
本实施例描述my_eval基于套接字代理实现业务不中断升级特性时的方法和流程。
my_eval服务端程序因为功能增加了或者解决了bug,需要升级。为了升级时能够让用户继续使用,即实现业务不中断升级特性,可以引入套接字代理。
假设my_eval服务端a为老版本,my_eval服务端b为新版本,在my_eval服务端升级时组网拓扑如下图10所示。
my_eval服务端升级过程与内存泄漏保护时的主备倒换过程类似,如图11所示其过程如下:
步骤D1:my_eval服务端a通过进程间通信通道与套接字代理建立连接,状态为“主”;
步骤D2:my_eval服务端b通过进程间通信通道与套接字代理建立连接,状态为“备”;
步骤D3:套接字代理向my_eval服务端a发送主备同步请求消息;
步骤D4:my_eval服务端a解析接收到的主备同步请求消息,启动主备同步数据流程,向套接字代理发送主备同步数据;
步骤D5:套接字代理收到主备同步数据消息后发送给my_eval服务端b;
步骤D6:my_eval服务端b解析主备同步数据,存储“a=200”,“b=190”这样的信息到自身存储区域;
步骤D7:my_eval服务端a主备同步数据结束,在发送给套接字代理的主备同步数据消息中设置“最后”标记;
步骤D8:套接字代理解析主备同步数据消息,发现“最后”标记,启动主备切换,即设置my_eval服务端a为备,my_eval服务端b为主;
步骤D9:my_eval客户端发送报文数据到套接字代理;
步骤D10:套接字代理将报文数据发送给my_eval服务端b进行处理。
my_eval服务端的主备升级切换可以在上述步骤D3套接字代理根据版本大小自动进行处理,也可以由套接字代理提供命令行接口,然后用户手动输入命令完成升级切换。对于后一种情况,套接字代理的命令行接口也是一个独立的程序,其与套接字代理也通过进程间通信通道建立连接,并且建立连接时告知套接字代理其为命令行接口。组网图如图12所示。
本发明还公开了一种套接字通信装置,包括客户端和服务端,还包括一组进程,所述进程称为套接字代理;所述套接字代理和服务端、客户端两者中的至少一者一起部署;套接字代理与客户端和服务端建立连接并进行通信。所述服务端包括两个服务端;所述套接字代理和两个服务端一起部署;套接字代理对两个服务端进行状态设置,具体为:设置两个服务端的状态为一“主”一“备”;状态为“主”的服务端为主服务端,状态为“备”的服务端为备服务端;套接字代理对两个服务端进行主、备服务端切换,所述主、备服务端切换为:将主服务端的状态设置为“备”,将备服务端的状态设置为“主”。
本发明的服务端或者客户端出现异常,则可以由套接字代理将后续的报文数据发送给备服务端或者客户端,减少了业务中断时间;若服务端或者客户端进行升级或者满足特定条件后倒换,则可以由套接字代理协调主备服务端或者客户端的倒换,在一定条件下报文数据零丢包,即业务不中断。而且特别的是,假定服务端程序需要长时间运行,而其程序有内存泄漏的问题,那么可以通过定时倒换主备服务端,完成其内存的清洗,降低了高稳定性服务端程序开发的难度。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种套接字通信方法,其特征在于,包括以下步骤:
基础框架运行:创建一组进程,所述进程称为套接字代理,所述套接字代理用于实现套接字代理与客户端和服务端的连接和通信,所述服务端为两个,套接字代理还用于实现两个服务端之间的主备切换;
套接字代理与客户端和服务端建立连接的过程具体为:
套接字代理作为独立的程序启动,等待服务端及客户端与其建立连接;
服务端启动,其根据输入信息或者配置文件获得套接字代理的进程间通信地址,通过进程间通信通道与套接字代理建立连接;
客户端启动,创建客户端套接字并与套接字代理建立连接;
套接字代理向服务端发送新建的客户端的连接信息,所述新建的客户端的连接信息包含新建的客户端的IP地址、端口号和所属通道号;
服务端解析新建的客户端的连接信息;
套接字代理与客户端和服务器进行通信的过程具体为:
客户端发送报文给套接字代理;
套接字代理接收报文并向服务端发送包含报文和报文所属通道号的业务消息;
服务端解析并处理业务消息,包括对报文进行处理并获得报文的处理结果;服务端向套接字代理发送处理后的业务消息,所述处理后的业务消息包含报文的所属通道号和报文的处理结果;
套接字代理接收和解析服务端发送的业务消息,根据报文的所属通道号找到对应的连接,将报文的处理结果发送给客户端;
客户端接收报文的处理结果;
套接字代理实现两个服务端之间的主备切换的过程具体为;
套接字代理对两个服务端进行状态设置,设置两个服务端的状态为一“主”一“备”;状态为“主”的服务端为主服务端,状态为“备”的服务端为备服务端;
当需要进行两个服务端之间的主备切换时,套接字代理将主服务端的状态设置为“备”,将备服务端的状态设置为“主”,以进行主、备服务端切换。
2.根据权利要求1所述的套接字通信方法,其特征在于,套接字代理在服务端异常的情况下进行主备切换以实现异常保护,具体为:
主服务端和备服务端定时向套接字代理发送保活报文;
套接字代理通过保活报文判断主服务端和备服务端是否处于正常状态,若主服务端不正常而备服务端正常,则进行主、备服务端切换。
3.根据权利要求2所述的套接字通信方法,其特征在于,所述判断主服务端和备服务端是否处于正常状态具体为:如套接字代理没有在预设时间内收到主服务端或备服务端的保活报文,则认定主服务端或备服务端不正常,如能够在预设时间内收到主服务端或备服务端的保活报文,则认定主服务端或备服务端正常。
4.根据权利要求3所述的套接字通信方法,其特征在于,套接字代理判断主服务端异常时先重新启动主服务端,若重新启动成功,则维持主、备服务端的状态不变,否则进行主、备服务端切换。
5.根据权利要求4所述的套接字通信方法,其特征在于,套接字代理将最先与套接字代理建立连接的服务端设置为初始的主服务端。
6.根据权利要求4所述的套接字通信方法,其特征在于,套接字代理根据配置文件指定初始的主服务端。
7.根据权利要求1所述的套接字通信方法,其特征在于,套接字代理还在服务端内存泄漏的情况下进行主备切换以实现内存泄漏保护,具体为:
设初始的主服务端为服务端a,初始的备服务端为服务端b;
客户端向套接字代理发送报文;
套接字代理接收报文并将其封装进业务消息中,将业务消息发送给服务端a;
服务端a解析并处理业务消息,将业务消息的处理结果发送给套接字代理;服务端a将业务消息的处理结果存储至本服务端的自身存储区域,向套接字代理发送携带业务消息处理结果的主备同步消息;
套接字代理接收业务消息的处理结果,将解析后的业务消息的处理结果发送给客户端;套接字代理接收并解析携带业务消息处理结果的主备同步消息,将解析后的业务消息的处理结果作为主备同步数据发送给服务端b;
套接字代理判断主、备服务端切换满足预设时间或预设次数后,向服务端a发送值为空且携带“最后”标记的主备同步消息;
服务端a值为空且携带“最后”标记的主备同步消息,检查主备同步数据是否完全同步,若是则发送携带“最后”标记的主备同步消息给套接字代理;若否则发送携带未同步的主备同步数据的主备同步消息进行同步;服务端a和服务端b通过套接字代理重复同步处理流程直到完全同步;
套接字解析携带“最后”标记的主备同步消息,发送退出消息给服务端a并设置服务端b的状态为“主”;
第三服务端启动,第三服务端与套接字代理通过进程间通信通道建立连接;
套接字将第三服务端的状态设置为“备”;
套接字代理向服务端b发送携带主备同步请求的主备同步消息;
服务端b接收携带主备同步请求的主备同步消息后启动同步处理流程,向套接字代理发送携带未同步的主备同步数据的主备同步消息;
套接字代理接收和解析携带未同步的主备同步数据的主备同步消息后将其发送给第三服务端;
第三服务端解析未同步的主备同步数据,存储解析后的未同步的主备同步数据到自身存储区域进行同步,服务端b和第三服务端重复同步处理流程直到完全同步;
所述第三服务端为内存泄漏后重新启动的服务端a或新启动的服务端。
8.根据权利要求1所述的一种套接字通信方法,其特征在于,套接字代理在服务端业务不中断的情况下进行主备切换以升级服务端,具体为:
套接字代理向主服务端发送携带主备同步请求的主备同步消息;
主服务端解析接收到的携带主备同步请求的主备同步消息后,启动同步处理流程,向套接字代理发送携带未同步的主备同步数据的主备同步消息;
套接字代理收到携带未同步的主备同步数据的主备同步消息后发送给备服务端;
备服务端解析携带未同步的主备同步数据的主备同步消息,将解析出的未同步的主备同步数据存储到自身存储区域;
主服务端的同步处理流程结束,向套接字代理发送携带“最后”标记的主备同步消息;
套接字代理解析携带“最后”标记的主备同步消息,发现“最后”标记,进行主、备服务端切换;
客户端向套接字代理发送报文;
套接字代理接收报文后将报文发送给主服务端。
9.一种套接字通信装置,包括客户端和服务端,其特征在于,还包括一组进程,所述进程称为套接字代理;所述服务端为两个,套接字代理还用于实现两个服务端之间的主备切换;套接字代理通过权利要求1-8的任一套接字通信方法与客户端和服务端建立连接并进行通信。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010195706.3A CN111327639B (zh) | 2020-03-19 | 2020-03-19 | 一种套接字通信方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010195706.3A CN111327639B (zh) | 2020-03-19 | 2020-03-19 | 一种套接字通信方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111327639A true CN111327639A (zh) | 2020-06-23 |
CN111327639B CN111327639B (zh) | 2022-07-22 |
Family
ID=71171630
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010195706.3A Active CN111327639B (zh) | 2020-03-19 | 2020-03-19 | 一种套接字通信方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111327639B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112929225A (zh) * | 2021-03-30 | 2021-06-08 | 平安科技(深圳)有限公司 | 会话异常处理方法、装置、计算机设备和存储介质 |
CN115866010A (zh) * | 2023-02-22 | 2023-03-28 | 江苏为是科技有限公司 | 一种rdma连接建立方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102239691A (zh) * | 2008-12-12 | 2011-11-09 | 坦德伯格电信公司 | 用于创建通信会话的方法 |
CN102742223A (zh) * | 2011-09-19 | 2012-10-17 | 华为技术有限公司 | 一种对用户服务进行迁移的方法、装置及系统 |
US20130007119A1 (en) * | 2010-03-19 | 2013-01-03 | Mobiles Devices Ingenierie | Data communication system and method |
US20150381710A1 (en) * | 2014-06-30 | 2015-12-31 | Fortinet, Inc. | Socket application program interface (api) for efficient data transactions |
CN109474661A (zh) * | 2018-09-25 | 2019-03-15 | 视联动力信息技术股份有限公司 | 一种网络请求事件的处理方法和系统 |
CN110049010A (zh) * | 2019-03-12 | 2019-07-23 | 广州市保伦电子有限公司 | 一种分布式平台终端设备连接服务器的方法及系统 |
-
2020
- 2020-03-19 CN CN202010195706.3A patent/CN111327639B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102239691A (zh) * | 2008-12-12 | 2011-11-09 | 坦德伯格电信公司 | 用于创建通信会话的方法 |
US20130007119A1 (en) * | 2010-03-19 | 2013-01-03 | Mobiles Devices Ingenierie | Data communication system and method |
CN102742223A (zh) * | 2011-09-19 | 2012-10-17 | 华为技术有限公司 | 一种对用户服务进行迁移的方法、装置及系统 |
US20140201267A1 (en) * | 2011-09-19 | 2014-07-17 | Huawei Technologies Co., Ltd. | Method, apparatus, and system for migrating user service |
US20150381710A1 (en) * | 2014-06-30 | 2015-12-31 | Fortinet, Inc. | Socket application program interface (api) for efficient data transactions |
CN109474661A (zh) * | 2018-09-25 | 2019-03-15 | 视联动力信息技术股份有限公司 | 一种网络请求事件的处理方法和系统 |
CN110049010A (zh) * | 2019-03-12 | 2019-07-23 | 广州市保伦电子有限公司 | 一种分布式平台终端设备连接服务器的方法及系统 |
Non-Patent Citations (2)
Title |
---|
S. WEI; A. JOST: "Virtual socket architecture for Internet access using Mobitex", 《10TH INTERNATIONAL CONFERENCE ON TELECOMMUNICATIONS, 2003. ICT 2003》 * |
景琦: "基于嵌入式系统VxWorks的设备驱动和网络通信", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112929225A (zh) * | 2021-03-30 | 2021-06-08 | 平安科技(深圳)有限公司 | 会话异常处理方法、装置、计算机设备和存储介质 |
CN112929225B (zh) * | 2021-03-30 | 2022-09-30 | 平安科技(深圳)有限公司 | 会话异常处理方法、装置、计算机设备和存储介质 |
CN115866010A (zh) * | 2023-02-22 | 2023-03-28 | 江苏为是科技有限公司 | 一种rdma连接建立方法及装置 |
CN115866010B (zh) * | 2023-02-22 | 2023-05-26 | 江苏为是科技有限公司 | 一种rdma连接建立方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111327639B (zh) | 2022-07-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7107329B1 (en) | In networks of interconnected router nodes for routing data traffic, a method of and system for imperceptibly upgrading router node software and the like without traffic interruption | |
CN101573940B (zh) | 用于tcp高可用性的方法和装置 | |
CN111327639B (zh) | 一种套接字通信方法及装置 | |
CN105677380B (zh) | 一种双主控隔离的逐板升级的方法及装置 | |
CN107919994B (zh) | 实现网络服务双机热备的方法及服务器 | |
JP2004534994A (ja) | データベースデータの同期 | |
KR20020056733A (ko) | 셀룰러 기지국 시스템의 메시지 처리방법 | |
JP2000307650A (ja) | データ通信システムおよび記録媒体 | |
CN109802995A (zh) | 消息推送方法、装置、设备及存储介质 | |
CN105978796A (zh) | 基于不稳定移动网络的消息通信方法及系统 | |
CN114500243B (zh) | 数据通信方法、装置、计算机可读介质及电子设备 | |
CN112511595B (zh) | 一种消息推送方法及消息服务系统 | |
JP2018013899A (ja) | 情報処理装置、情報処理方法、情報処理システム及びプログラム | |
CN108667682B (zh) | 基于安全网关深度包检测的连接同步方法、装置及介质 | |
CN113783826B (zh) | 一种微服务异常处理方法和装置 | |
CN113722126A (zh) | 一种请求处理方法和装置 | |
CN113347221A (zh) | 一种数据同步方法、通讯站、集群系统和存储装置 | |
CN109981365A (zh) | 数据监听方法、装置、用户设备及存储介质 | |
WO2024159848A9 (zh) | 基于主备机的数据包传输控制方法及装置、设备、介质 | |
CN115640153B (zh) | 系统架构、消息处理方法、装置、电子设备及存储介质 | |
CN116455746A (zh) | 一种dpu中虚拟交换机的带流量升级方法 | |
JPH0830523A (ja) | オンラインメッセージの通信方法 | |
CN116388910B (zh) | 一种广播系统交互方法、终端、电子设备和存储介质 | |
CN111314465B (zh) | 弱网环境通讯方法、装置和电子设备 | |
JP2000163373A (ja) | 通信端末再開システム |
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 |