CN102546808B - 服务端基于tcp的交互处理方法 - Google Patents

服务端基于tcp的交互处理方法 Download PDF

Info

Publication number
CN102546808B
CN102546808B CN201210013898.7A CN201210013898A CN102546808B CN 102546808 B CN102546808 B CN 102546808B CN 201210013898 A CN201210013898 A CN 201210013898A CN 102546808 B CN102546808 B CN 102546808B
Authority
CN
China
Prior art keywords
result
data
thread
long connection
processing method
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
Application number
CN201210013898.7A
Other languages
English (en)
Other versions
CN102546808A (zh
Inventor
梁文
刘靖
林晨
肖根元
曹志军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Winbet Technology Co.,Ltd.
Original Assignee
SHENZHEN TYDIC INFORMATION TECHNOLOGY Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by SHENZHEN TYDIC INFORMATION TECHNOLOGY Co Ltd filed Critical SHENZHEN TYDIC INFORMATION TECHNOLOGY Co Ltd
Priority to CN201210013898.7A priority Critical patent/CN102546808B/zh
Publication of CN102546808A publication Critical patent/CN102546808A/zh
Application granted granted Critical
Publication of CN102546808B publication Critical patent/CN102546808B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明提供一种服务端基于TCP的交互处理方法,其包括以下步骤:步骤1、初始化,加载配置信息;步骤2、创建长连接,形成连接池;步骤3、长连接均匀处理异步请求及同步请求,并往IO写数据包;步骤4、线程池起动线程,解释数据包;步骤5,线程通过ID找结果,找到结果则发送并结束请求,若结果为空则等待并再通过ID找结果,直到找到或超时,结束请求。本方法采用NIO和长连接两者的优点解决他们的不足,用少量的长连接解决大并发、交互频繁和伸缩性差问题,比采用传统实现的通讯技术,效率至少提高了10倍以上,且只用一个API和一些配置,支持同步和异步调用,并用线程池异步并发调用自己解释数据包功能实现不同的通讯协议。

Description

服务端基于TCP的交互处理方法
技术领域
本发明涉及一种服务端基于TCP的交互处理方法,尤其涉及一种基于连接池、连接支持一次鉴权、支持不同通讯协议、异步的非阻塞式的高伸缩性网络I/O交互技术。
背景技术
现有基于TCP的通讯用的都是socket,通常是先建立连接交互完关掉连接,建立连接和关连接都很耗网络资源,导致性能低下。为了解决上述问题,于是采用了长连接,多个长连接就组成连接池,但每次与服务端开始交互时都占用一个长连接直到交互结束,在服务器处理业务功能过程中这个长连接是空闲的,会导致网络资源的浪费。并且在大并发或服务端的处理时间比较长时,我们需要大量的长连接才能满足要求,如果受限于网络资源和服务器的资源只能建立一定量的长连接,那么部分的并发请求就要等待。于是JDK1.5提供了NIO的socket,NIO解决了长连接存在的问题,性能也有很大了提高,在连续交互的状况下,差不多跟上长连接。但在超时的情况下,NIO的连接自动会关掉,没有办子实现长连接,很多基于长连接优先开发的功能没办子实现,比如:鉴权。在建立长连接时进行一下鉴权,如果鉴权通过,在后续的交互我们不用再鉴权,这种特征和会话相类同。如果是用NIO去做每次交互都要鉴权,就会带来很大的浪费。
发明内容
本发明的目的在于提供一种服务端基于TCP的交互处理方法,采用NIO和长连接两者的优点解决他们的不足,用少量的长连接解决大并发,交互很频繁性能和伸缩性差问题,大大提高了通讯技术效率。
为实现上述目的,本发明提供一种服务端基于TCP的交互处理方法,包括以下步骤:
步骤1、初始化,加载配置信息,所述配置信息一并加载到HashMap中;
步骤2、创建长连接,形成连接池,所述创建长连接的方式为心跳方式,所述长连接的发送和接收采用异步方式,长连接接收或发送的数据通过四位字节长度的ID和高效的细粒度数据建立关联;
步骤3、长连接均匀处理异步请求及同步请求,并往IO写数据包,如果所述长连接处理同步请求需要等待结果,则采用异步API的方式处理,发送并等待结果,如果所述长连接处理异步请求,则发送并结束。所述往IO写数据在开始和结束写一瞬间,用锁保证数据包完整写入IO中,且在每个数据包前面插入四位字节长度的ID;
步骤4、IO把数据包交给线程池,线程池起动线程,解释数据包,所述IO接收到数据包后交给线程池,该线程池异步、并发处理每个数据包,所述线程解释数据包,返回一个数据,把ID除以10得到余数,通过余数找到所在的区,从这个区找到HashMap,把ID作为key,返回的数据对象作为值放到HashMap中;
步骤5、线程通过ID找结果,若找到结果则发送并结束请求,若结果为空则等待,并再按通过ID找结果,直到找到或超时,结束请求,所述线程通过ID找结果过程采用细粒度的的数据块方式。
所述创建长连接时,如果加载的配置信息需要鉴权,则用用户名和密码到服务端鉴权通过后,才有效完成创建长连接,整个交互过程只需一次鉴权,后续交互不用再鉴权。
所述心跳方式为创建成功后的长连接没有数据发送状态下,每隔30秒发送一个心跳,测试连路,连路不通则重新创建连接。
步骤1所述细粒度数据包括:一容器及存放的数据,该容器包括第一层及第二层。
所述长连接等待有两种方式:一为等待一一通知方式;一为每隔一次的时间通过ID去找结果。
所述步骤5中细粒度的数据块方式为把第一数据块细分为数个第二数据块,采用数条进程同时访问该数个第二数据块,并对该数个第二数据块进行同步控制。
本发明的有益效果:本发明提供的一种服务端基于TCP的交互处理方法,该方法以心跳的方式创建长连接并形成连接池,每个长连接的发送和接收采用异步的方式完成,长连接接收及发送的数据包通过ID和高效的细粒度数据同步建立关联,服务端把IO接收到的数据包交给线程池异步、并发处理每个数据包,实现了NIO和长连接优点,用少量的长连接解决大并发、交互频繁和伸缩性差的问题,比采用传统实现的通讯技术,效率至少提高了10倍以上,且只用一个API和一些配置,支持同步和异步调用,并支持通过扩展,自己解释数据包,实现不同的通讯协议。
为了能更进一步了解本发明的特征以及技术内容,请参阅以下有关本发明的详细说明与附图,然而附图仅提供参考与说明用,并非用来对本发明加以限制。
附图说明
下面结合附图,通过对本发明的具体实施方式详细描述,将使本发明的技术方案及其它有益效果显而易见。
附图中,
图1为本发明服务端基于TCP的交互处理方法的流程示意图。
具体实施方式
为更进一步阐述本发明所采取的技术手段及其效果,以下结合本发明的优选实施例及其附图进行详细描述。
请参阅图1,本发明服务端基于TCP的交互处理方法包括如下步骤:
步骤1、初始化,加载配置信息。
初始化,加载配置信息,并把所加载的信息加载到HashMap中。
步骤2、根据配置信息创建长连接21,形成连接池23。
根据加载配置信息创建长连接21时,以心跳方式创建长连接。若加载的配置信息需要鉴权22,则要用用户名和密码在服务端鉴权22通过后,才能有效完成创建长连接,整个交互过程只需一次鉴权22,后续交互不用再鉴权22。当连路上没有数据发送时,每隔30秒发送个心跳,测试连路,如果连路不通则重新创建连接。
步骤3、长连接均匀处理异步请求及同步请求,并往IO写数据包。
该长连接接收和发送的数据包通过ID和高效的细粒度数据同步建立关联。该高效的细粒度数据同步块存取是由一个容器和存放数据两部分组成,容器有两层,第一层是按ID大小分为多个区域,第二层是区域下的HashMap,HashMap用来存在数据,Key(关键码)是ID,Value(值)是经过分析的数据包,HashMap里的数据再分很多同步块,保证数据是线程安全的,又要得同步的范围最小化。
连接池里的每个长连接均匀去处理每个请求,长连接不用等待结果,不管来多少请求都能得到马上的处理。如果请求方用的是同步的API需要等待结果,采用异步API的方式处理,发送并等待结果32。如果请求方式为异步请求,则发送并结束31。每个长连接往IO写数据包,并在开始写到结束写一瞬间,用锁保证数据包是完整写入到IO中,在每个数据包前面插入四位字节长度的ID。
该异步请求等待结果的等待方式有两种,一种是等待一一通知方式,另一种是每隔一次的时间去通过ID找结果。该服务端通过配置信息来决定采用那一种方式。
步骤4、线程池起动线程,解释数据包。
服务端把IO接收到的数据包交给线程池异步、并发处理每个数据包。
每个长连接接到的数据包41把前四个字节解释成ID,并去掉四位,从线程池42里起动一条线程,把ID和数据包传给线程,在线程里调用解释数据包43的功能,这个功能可以通过配置调自己实现的解释功能。线程解释完成后返回一个数据对象,把该ID除以10得到得余数,通过余数找到所在的区,从这个区里找到HashMap,把ID作为key、返回的数据对象作为值放到HashMap中,若等待方式采用的是一一通知方式,则一一通知等待的请求,若等待方式为每隔一次的时间去通过ID采用细粒度的数据块方式找结果,则等待请求来找结果。该Hash里的值分成多块,每块用锁保证线程是安全的。
该细粒度的数据块方式为:当并发量大时,会存在很多线程要从同一个数据块里取结果数据,同时解释数据包的线程也往该数据块存放数据,为了保证数据块数据的一致性,必需对数据块的数据进行同步处理,即同一时间只有一个线程访问该数据块。因此,为了提高服务端的性能,把一个第一数据块分成数个第二数据块,起用数条进程同时访问该些第二数据块,达到同一时间只有一个线程访问该些第二数据块,并对该些第二数据块进行同步控制,保证数据一致性。第一数据块为现有处理方式下线程访问的原始数据块,第二数据块为细分第一数据块所得的数个小数据块。
步骤5、线程通过ID找结果,结果为空则等待,并再按通过ID方式找结果,直到找到或超时,结束请求。
步骤5接着步骤3或步骤4,等待结果的请求用ID除以10得到余数,通过余数找到区,再从区找到HashMap,通过ID采用细粒度的数据块方式找结果,若找到结果则发送并结束请求,若结果为空,则继续等待,再按上述方式找结果,直到找到或超时,结束请求52。通过ID找到结果过程采用细粒度数据块方式,在保证数据一致性前提下,采用多条线程同时处理一个第一数据块方式,可以很大地提高服务端的性能。
本发明提供的一种服务端基于TCP的交互处理方法,该方法以心跳的方式创建长连接并形成连接池,每个长连接的发送和接收采用异步的方式完成,长连接接收及发送的数据包通过ID和高效的细粒度数据同步建立关联,服务端把IO接收到的数据包后交给线程池异步、并发处理每个数据包,实现了NIO和长连接优点,用少量的长连接解决大并发、交互频繁和伸缩性差的问题,比采用传统实现的通讯技术,效率至少提高了10倍以上,且只用一个API和一些配置,支持同步和异步调用,并支持通过扩展,自己解释数据包,实现不同的通讯协议。
以上所述,对于本领域的普通技术人员来说,可以根据本发明的技术方案和技术构思作出其他各种相应的改变和变形,而所有这些改变和变形都应属于本发明权利要求的保护范围。

Claims (6)

1.一种服务端基于TCP的交互处理方法,其特征在于,包括以下步骤:
步骤1、初始化,加载配置信息,所述配置信息一并加载到HashMap中;
步骤2、创建长连接,形成连接池,所述创建长连接的方式为心跳方式,所述长连接的发送和接收采用异步方式,长连接接收或发送的数据通过四位字节长度的ID和高效的细粒度数据建立关联;
步骤3、长连接均匀处理异步请求及同步请求,并往IO写数据包,如果所述长连接处理同步请求需要等待结果,则采用异步API的方式处理,发送并等待结果,如果所述长连接处理异步请求,则发送并结束;所述往IO写数据在开始和结束写一瞬间,用锁保证数据包完整写入IO中,且在每个数据包前面插入四位字节长度的ID;
步骤4、IO把数据包交给线程池,线程池起动线程,解释数据包,所述IO接收到数据包后交给线程池,该线程池异步、并发处理每个数据包,所述线程解释数据包,返回一个数据,把ID除以10得到余数,通过余数找到所在的区,从这个区找到HashMap,把ID作为key,返回的数据对象作为值放到HashMap中;
步骤5、线程通过ID找结果,若找到结果则发送并结束请求,若结果为空则等待,并再通过ID找结果,直到找到或超时,结束请求,所述线程通过ID找结果过程采用细粒度的数据块方式。
2.如权利要求1所述的服务端基于TCP的交互处理方法,其特征在于,所述创建长连接时,如果加载的配置信息需要鉴权,则用用户名和密码到服务端鉴权通过后,才有效完成创建长连接,整个交互过程只需一次鉴权,后续交互不用再鉴权。
3.如权利要求1所述的服务端基于TCP的交互处理方法,其特征在于,所述心跳方式为创建成功后的长连接没有数据发送状态下,每隔30秒发送一个心跳,测试连路,连路不通则重新创建连接。
4.如权利要求1所述的服务端基于TCP的交互处理方法,其特征在于,步骤1所述细粒度数据包括:一容器及存放的数据,该容器包括第一层及第二层,第一层按ID大小分为多个区域,第二层是区域下的HashMap。
5.如权利要求1所述的服务端基于TCP的交互处理方法,其特征在于,所述长连接等待有两种方式:一为等待一一通知方式;一为每隔一次的时间通过ID去找结果。
6.如权利要求1所述的服务端基于TCP的交互处理方法,其特征在于,所述步骤5中细粒度的数据块方式为把第一数据块细分为数个第二数据块,采用数条进程同时访问该数个第二数据块,并对该数个第二数据块进行同步控制。
CN201210013898.7A 2012-01-17 2012-01-17 服务端基于tcp的交互处理方法 Active CN102546808B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210013898.7A CN102546808B (zh) 2012-01-17 2012-01-17 服务端基于tcp的交互处理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210013898.7A CN102546808B (zh) 2012-01-17 2012-01-17 服务端基于tcp的交互处理方法

Publications (2)

Publication Number Publication Date
CN102546808A CN102546808A (zh) 2012-07-04
CN102546808B true CN102546808B (zh) 2014-06-25

Family

ID=46352754

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210013898.7A Active CN102546808B (zh) 2012-01-17 2012-01-17 服务端基于tcp的交互处理方法

Country Status (1)

Country Link
CN (1) CN102546808B (zh)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102957627B (zh) * 2012-11-19 2016-06-08 浪潮电子信息产业股份有限公司 一种基于tcp长连接的提高数据传输效率的方法
CN103051724B (zh) * 2012-12-28 2016-06-15 北京思特奇信息技术股份有限公司 一种基于长连接的套接字同步方法
CN104166589A (zh) * 2013-05-17 2014-11-26 阿里巴巴集团控股有限公司 一种心跳包的处理方法和装置
CN105323183B (zh) * 2014-08-01 2019-05-10 中国电信股份有限公司 网络服务器之间的数据传输处理方法与系统
CN105933464B (zh) * 2016-04-13 2019-05-31 北京思特奇信息技术股份有限公司 一种基于网络连接池化的网络通信方法及系统
CN106102101A (zh) * 2016-08-25 2016-11-09 上海斐讯数据通信技术有限公司 一种无线接入点与无线接入控制器连接的处理方法及系统
CN106648832B (zh) * 2016-12-09 2020-01-14 武汉烽火信息集成技术有限公司 提高虚拟机资源利用率的装置及方法
CN107147620B (zh) * 2017-04-19 2020-07-24 武汉聚风天下科技有限公司 一种消息交互处理方法、客户端和服务端
CN109189595A (zh) * 2018-09-17 2019-01-11 深圳怡化电脑股份有限公司 基于服务器的事件处理方法、装置、设备及介质
CN110166378B (zh) * 2019-04-04 2023-06-16 珠海欧力配网自动化股份有限公司 一种用于配网终端调试维护的通信系统及方法
CN116185662B (zh) * 2023-02-14 2023-11-17 国家海洋环境预报中心 基于NetCDF和非阻塞通信的异步并行I/O方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101304473A (zh) * 2008-06-20 2008-11-12 中山大学 一种基于散列表的双向机顶盒会话信息维护方法
CN101001213B (zh) * 2006-06-28 2010-10-27 华为技术有限公司 一种短消息传输系统及方法

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101001213B (zh) * 2006-06-28 2010-10-27 华为技术有限公司 一种短消息传输系统及方法
CN101304473A (zh) * 2008-06-20 2008-11-12 中山大学 一种基于散列表的双向机顶盒会话信息维护方法

Also Published As

Publication number Publication date
CN102546808A (zh) 2012-07-04

Similar Documents

Publication Publication Date Title
CN102546808B (zh) 服务端基于tcp的交互处理方法
CN110413386B (zh) 多进程处理方法、装置、终端设备及计算机可读存储介质
TWI266200B (en) A computer network, a computer readable medium, a computer system and method for processing programs and data
WO2019169913A1 (zh) 一种数据处理的方法、装置、服务器和系统
CN110149382A (zh) 数据同步的方法、系统、主服务器、同步客户端及介质
RU2683620C1 (ru) Способ осуществления совместного использования данных между клиентом и виртуальным рабочим столом, клиентом и системой
WO2018223786A1 (zh) 云桌面系统、及其图像序列压缩编码方法和介质
CN104239418A (zh) 支持分布式数据库的分布锁方法以及分布式数据库系统
WO2021031473A1 (zh) 基于多资产模型的区块链资产处理方法及相关设备
WO2023000502A1 (zh) 虚拟机磁盘数据的加解密方法、装置、设备及存储介质
CN105516086B (zh) 业务处理方法及装置
WO2009097776A1 (zh) 一种实现业务升级的系统、装置及方法
US20150127942A1 (en) Security key device for secure cloud service, and system and method for providing secure cloud service
WO2014183417A1 (zh) 管理内存的方法、装置和系统
CN105554143A (zh) 一种高可用缓存服务器及其数据处理方法和系统
CN102916998A (zh) 一种基于云计算的网络公共白板系统及方法
CN104793999A (zh) 伺服服务器架构系统
CN112261094A (zh) 一种报文处理方法及代理服务器
WO2023016414A1 (zh) 凭据的轮转方法、计算设备及存储介质
WO2023071576A1 (zh) 容器集群构建方法及系统
CN111314212A (zh) 一种基于Netty与插件机制的API网关及控制方法
CN116069493A (zh) 一种数据处理方法、装置、设备以及可读存储介质
WO2012000455A1 (zh) 一种客户端及负载均衡的方法
US9609082B2 (en) Processing a unit of work
WO2016095377A1 (zh) 一种瘦客户端的图像显示方法、装置及电子设备

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C53 Correction of patent for invention or patent application
CB03 Change of inventor or designer information

Inventor after: Liang Wen

Inventor after: Liu Jing

Inventor after: Lin Chen

Inventor after: Xiao Genyuan

Inventor after: Cao Zhijun

Inventor before: Liang Wen

COR Change of bibliographic data

Free format text: CORRECT: INVENTOR; FROM: LIANG WEN TO: LIANG WEN LIU JING LIN CHEN XIAO GENYUAN CAO ZHIJUN

C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right
TR01 Transfer of patent right

Effective date of registration: 20210426

Address after: 518048 308, block a, shenzhuang general building, 6 Guanglan Road, free trade zone, Futian District, Shenzhen City, Guangdong Province

Patentee after: Winbet Technology Co.,Ltd.

Address before: 518000 T3 building, seven South Building, South District, Nanshan District hi tech Industrial Park, Guangdong, Shenzhen, three, China, B

Patentee before: SHENZHEN TYDIC INFORMATION TECHNOLOGY Co.,Ltd.