CN102035880B - 一种保持连接的方法及装置 - Google Patents
一种保持连接的方法及装置 Download PDFInfo
- Publication number
- CN102035880B CN102035880B CN201010530233.4A CN201010530233A CN102035880B CN 102035880 B CN102035880 B CN 102035880B CN 201010530233 A CN201010530233 A CN 201010530233A CN 102035880 B CN102035880 B CN 102035880B
- Authority
- CN
- China
- Prior art keywords
- message queue
- event
- request
- connection
- module
- 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
Images
Landscapes
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
Abstract
本发明公开了一种保持连接的方法,用于实现基于http的长连接,提高了http中数据传输的实时性。所述方法包括:接收连接请求并建立http连接;根据连接请求创建消息队列;通过消息队列等待需要传输的数据,以保持连接。本发明还公开了用于实现所述方法的装置。
Description
技术领域
本发明涉及通信领域,特别涉及一种保持连接的方法及装置。
背景技术
http(Hypertext Transfer Protocol,超文本传输协议)是超文本转移协议,是客户端浏览器或其他程序与Web(环球网)服务器之间的应用层通信协议。http中本身只有短连接的方式,传输过程主要是:请求数据-建立连接-发送响应-关闭连接,在请求响应结束后立即关闭连接,如需新的请求必须重新建立连接。由于建立http请求的连接需要一定的时间,这样一来实时性就会降低,不适应于对实时性要求较高的***,如监控***,且对服务器的负载也会造成较大影响。
针对http短连接的弊端,现有技术中提出了一些建立http长连接的方式,所谓长连接,指在一个连接上可以连续发送多个数据包,然后断开连接。其中主要技术包括:
方式一:利用AJAX(Asynchronous JavaScript and XML,同步JavaScript(一种脚本语言)和XML(Extensible Markup Language,可扩展标记语言))技术,客户端通过不间断的短连接来构成了长连接。此方案虽然较为简单,但服务器端需要处理大量的http请求,给服务器端造成太大的负荷,且客户端也需要不断发送请求,负荷也不小。
方式二:利用Flash(交互式矢量图和Web动画的标准)提供的XMLSocket类,在JavaScript中直接调用Flash中XMLSocket类提供的接口来实现http方式的长连接。其中,Flash的脚本语言是ActionScript,XMLSocket是ActionScript中的一个类。此方案的缺点在于,XMLSocket类只能连接到端口号大于或等于1024的TCP端口,与XMLSocket对象通讯的服务器程序也必须分配到端口号大于或等于1024的端口。一般防火墙为了安全起见,都只开80和其他一些常用的端口,因此XMLSocket类无法穿过防火墙,可能导致消息发送不成功,且需要在浏览器中设置额外的通信接口,该接口并非浏览器默认,可能会受到代理服务器的限制,并且,客户端也需要安装Flash插件。
发明内容
本发明实施例提供一种保持连接的方法,用于实现基于http的长连接,提高了http中数据传输的实时性。
一种保持连接的方法,包括以下步骤:
接收连接请求并建立http连接;
根据连接请求创建消息队列;
通过消息队列等待需要传输的事件,以保持连接;
对http连接进行检测,确定是否需要保持连接,当需要保持连接时,控制消息队列保持连接,当不需要保持连接时,控制消息队列关闭连接。
一种保持连接的方法,包括以下步骤:
当需要请求数据时,发送连接请求;
接收确认建立连接的响应消息,并根据响应消息确认建立http连接;
确认建立连接后发送业务请求,以获取数据。
一种保持连接的装置,应用于网络侧,包括:
收发模块,用于接收连接请求;
创建模块,用于建立http连接,及根据连接请求创建消息队列;
分发模块,用于通过所述消息队列等待需要传输的事件,以保持连接;
执行模块,用于对http连接进行检测,确定是否需要保持连接,当需要保持连接时,控制消息队列保持连接,当不需要保持连接时,控制消息队列关闭连接。
一种保持连接的装置,应用于客户端,包括:
收发模块,用于当需要请求数据时,发送连接请求,接收确认建立连接的响应消息,及发送业务请求,以获取数据;
处理模块,用于确认建立http连接。
本发明实施例中接收连接请求并建立http连接;根据连接请求创建消息队列;通过消息队列等待需要传输的数据,以保持连接。在现有技术中,有待发送数据时才会有发送队列,该队列只起缓存数据的作用,因此无法长期保持连接,而在本发明实施例中,消息队列是与连接相对应,只要建立连接即创建该连接的消息队列,该消息队列不是因数据的存在而存在,从而建立了基于http的长连接,提高了http中数据传输的实时性。
附图说明
图1为本发明实施例中保持连接的***的主要结构图;
图2A为本发明实施例中网络侧保持连接的装置的主要结构图;
图2B为本发明实施例中网络侧保持连接的装置的详细结构图;
图2C为本发明实施例中在网络侧包括初始化模块及验证模块的保持连接的装置的详细结构图;
图3为本发明实施例中客户端保持连接的装置的主要结构图;
图4为本发明实施例中网络侧保持连接的方法的主要流程图;
图5为本发明实施例中客户端保持连接的方法的主要流程图;
图6为本发明实施例中网络侧保持连接的方法的详细流程图;
图7为本发明实施例中通过分发模块访问消息队列来获知是否有可提取的事件时网络侧保持连接地方法的详细流程图;
图8为本发明实施例中获取数据的详细方法流程图。
具体实施方式
本发明实施例中接收连接请求并建立http连接;根据连接请求创建消息队列;通过消息队列等待需要传输的数据,以保持连接。在现有技术中,有待发送数据时才会有发送队列,该队列只起缓存数据的作用,因此无法长期保持连接,而在本发明实施例中,消息队列是与连接相对应,只要建立连接即创建该连接的消息队列,该消息队列不是因数据的存在而存在,从而建立了基于http的长连接,提高了http中数据传输的实时性。
参见图1,本发明实施例中保持连接的***包括服务器100和客户端200。
服务器100用于接收连接请求并建立http连接;根据连接请求创建消息队列;通过消息队列等待需要传输的数据,以保持连接。接收连接请求,对该请求进行处理,及发送确认建立连接的响应事件。其中,服务器100中包括收发模块、消息队列、分发模块、执行模块、构造模块、初始化模块及验证模块。收发模块接收客户端200发送的连接请求,创建模块根据该连接请求创建一个执行模块,执行模块根据该请求构造建立连接的Event(事件),创建模块还要根据该接收的请求的类型确定该创建的执行模块处理需要传输的事件类型,以创建对应的浏览器适配器,并通过浏览器适配器向该客户端200发送事件。构造模块根据创建的执行模块中包含的信息构造Command(命令)对象,及通过执行该Command对象构造建立请求的响应事件rspEvent,构造模块还用于将所请求的数据封装成事件,放入消息队列,分发模块从消息队列中提取待发送的事件,传递给收发模块,由收发模块中的浏览器适配器向客户端200发送rspEvent及所请求的数据,其中,该数据是封装在事件中发送给客户端200的。初始化模块还要在处理请求之前进行初始化,及验证模块在无封装成事件的数据传输时可以向客户端200发送心跳事件,以使客户端200获知服务器100工作正常。当浏览器关闭时,向服务器100发送退出请求,服务器100接收到该请求后连接关闭;或者消息队列中可以有一个定时器,当定时器超时后消息队列还未收到事件,则关闭本次连接;或者执行模块在接收业务请求后可以判断出所接收的业务请求的类型,如果为特殊请求,则保持连接,如果为非特殊请求,则在收发模块向客户端200发送完其所请求的数据后即可关闭连接,这样以节约网络资源。
客户端200用于当需要请求数据时,发送连接请求;接收确认建立连接的响应消息,并根据响应消息确认建立http连接;确认建立连接后发送用于业务请求,以获取数据。客户端200向服务器100发送连接请求,在接收到服务器100返回的rspEvent后,客户端200确认建立连接,则向服务器100发送业务请求,以获取数据,服务器100根据该请求进行处理及向客户端200发送所请求的数据,当客户端200收到所请求的数据后,负责处理并更新数据,利用javascript(java脚本)和AJAX技术对页面信息进行更新。当浏览器关闭时,还要向服务器100发送退出请求,服务器100收到该退出请求后,关闭连接。
参见图2A,本发明实施例中保持连接的装置包括收发模块101、创建模块102、消息队列103和分发模块104。该装置可以是服务器等网络侧设备。
收发模块101用于接收请求及向客户端200发送建立连接的响应事件rspEvent及所请求的数据。收发模块101用于接收客户端200发送的连接请求及其它用于获取数据的请求(也就是业务请求),通过收发模块101中的浏览器适配器向该客户端200中的浏览器发送rspEvent及所请求的数据,其中,该所请求的数据是以封装成事件的形式发送。其中,该rspEvent中可以携带执行模块105所对应的ID。其中,浏览器适配器是创建模块102在创建执行模块105后创建的,一个浏览器适配器只能发送一种类型的业务请求所对应的事件。
创建模块102用于确认建立http连接及创建模块。创建模块102用于根据接收的连接请求确认建立连接,并创建执行模块105、消息队列103和分发模块104。创建模块102还用于根据接收的连接请求创建浏览器适配器,该浏览器适配器创建后定义在收发模块101中。
消息队列103用于存放待发送的事件。其中,消息队列103是创建模块102在创建执行模块105后创建的。其中,消息队列103接收到的待发送的数据是已经封装成事件的数据,实行先入先出、后入后出的发送原则,传递给分发模块104。当分发模块104到消息队列103中取事件时,若消息队列103中没有事件,则可以将分发模块104的状态设置为等待状态,当消息队列103中有事件时,将分发模块104的状态设置为工作状态,并触发分发模块104将该事件提取出来,提取完毕后继续将分发模块104的状态设置为等待状态。或者若消息队列103中没有事件,分发模块104可以不断访问消息队列103,以询问的方式获知消息队列103中是否放入了事件,当消息队列103中放入事件后,分发模块104将其提取出来并传递给收发模块101,传递完毕后继续不断访问消息队列103,以提取其中的事件,如此循环执行。这样就使连接一直不会关闭,实现了长连接。消息队列103还可以用于决定是否关闭连接。消息队列103中可以有一个定时器,当定时器超时后消息队列103还未收到事件,则关闭本次连接。这样以节约网络资源。
分发模块104用于从消息队列103中提取待发送的事件。较佳的,分发模块104可以具体为事件分发器Subscriber,是创建模块102在创建执行模块105后创建的。分发模块104从消息队列103中提取出待发送的事件,再传递给收发模块101,由收发模块101中的浏览器适配器进行发送。其中,一个分发模块104对应于一个消息队列103,无论一个消息队列103中有多少事件,都由一个分发模块104来进行提取。
参见图2B,所述装置还可以包括执行模块105及构造模块106。
执行模块105用于保存信息及创建事件。其中,执行模块105是在收发模块101收到连接请求后,由创建模块102根据该请求所创建的。执行模块105中保存了各类信息,如所述请求的类型、该执行模块105的ID(标识符)、所请求的数据类型等。执行模块105根据收发模块101收到的连接请求构造建立连接的Event(事件),该Event中封装了请求的类型,设置该事件的类型为connect(连接)。执行模块105中还保存了自身的ID、该ID可以为字符串形式,也可以是其它形式,用于唯一标识执行模块105。在一个服务器中,执行模块105可能有多个,每一个长连接都对应一个执行模块105,所有的执行模块105都由创建模块102中的SessionManager(会话管理)单元来进行管理,SessionManager单元为单例模式,即一个SessionManager单元管理数个执行模块105。执行模块105还用于对http连接进行检测,确定是否需要保持连接,当需要保持连接时,控制消息队列保持连接,当不需要保持连接时,控制消息队列关闭连接。执行模块105根据请求的类型确定该请求所对应的事件类型,以使创建模块102创建对应的浏览器适配器。执行模块105还可以判断出所接收的业务请求的类型,根据所接受的业务请求的类型检测是否需要保持连接,及控制连接何时需要中断。并将所述业务请求的类型告知消息队列103,如果为特殊请求,则控制消息队列103保持连接;如果为非特殊请求,则在向客户端200发送完其所请求的数据后即可控制消息队列103关闭连接,例如,可以在所请求的事件发送完毕后消息队列103将分发模块104的状态设置为停止状态,分发模块104不必继续等待从消息队列103中提取事件,相当于连接关闭。或者,执行模块105判断出所接收的业务请求的类型,当所述业务请求为特殊业务时,向消息队列103发送保持连接的消息,当所述业务请求为非特殊业务时,向消息队列103发送关闭连接的消息,消息队列103根据执行模块105发送的消息进行相应操作。其中,本发明实施例中特殊请求是指所请求获取的数据需要实时更新的请求,非特殊请求是指所请求获取的数据不需要实时更新的请求,只需获取一次数据即可。
构造模块106用于构造Command(命令)对象,以及通过执行Command对象构造rspEvent。构造模块106根据执行模块105中包含的请求的类型构造Command对象,其中,该Command对象定义在构造模块106中的Controller(命令执行器)中,命令执行器用于执行该Command对象,以构造rspEvent。较佳的,该rspEvent中包括执行模块105的ID和所请求的事件类型等信息。构造模块106还用于根据请求激活生产数据的线程,从中获取所请求的数据,并将其封装成事件,放入消息队列103中。当构造模块向该消息队列103中放入所请求的事件时,若消息队列103中存放的事件已满,则消息队列103可以将构造模块106的状态设置为等待状态,当消息队列103中有存放空间时,将构造模块106的状态设置为工作状态,并触发构造模块106向其中放入事件,放入事件完毕后再将构造模块106的状态设置为等待状态,或者若消息队列103中没有存放空间,构造模块106可以不断访问消息队列103,以询问的方式获知消息队列103中是否可以放入事件。
参见图2C,所述装置还可以包括初始化模块107和验证模块108。
初始化模块107用于初始化创建模块102。初始化模块107可以在接收到连接请求后开始初始化创建模块102,以开始处理该请求,或者初始化模块107也可以在未接到请求时初始化创建模块102、分发模块105及执行模块103,其中对创建模块102的初始化过程是指通过一个定时器开始对它所管理的执行模块103进行检测,包括检测执行模块103是否设置超时,是否有效,是否需要删除等,以准备接收请求。
验证模块108用于将心跳事件放入消息队列103。当消息队列101中没有数据封装成的事件传输时,验证模块108用于向消息队列103中添加心跳事件,由收发模块101中的浏览器适配器发送给客户端200,该心跳事件可以周期性添加并发送,用于告知客户端200服务器100工作正常,如果客户端200收到了心跳事件,则表明服务器100运行正常,如果客户端200在没收到数据时也没收到心跳事件,则获知服务器100可能出现了故障。
参见图3,本发明实施例中保持连接的***中的客户端200包括收发模块201和处理模块202。
收发模块201用于发送请求及接收响应。收发模块201用于当需要请求获取数据时,向服务器100发送连接请求,及接收服务器100返回的rspEvent。其中,该rspEvent中可以携带服务器100中执行模块105的ID。当确认建立连接后,收发模块201向服务器100发送业务请求,以获取数据,服务器100根据该请求进行处理及向收发模块201发送所请求的数据。当浏览器关闭时,收发模块201还用于向服务器100发送退出请求。其中,一个长连接支持一种类型的业务请求,因此只能传输此类业务请求所对应的数据。如果浏览器需要发送其它类型的业务请求,则需要再建立新的长连接来发送,一个浏览器上可以建立多个长连接,类似的,浏览器需要发送几种类型的业务请求,则也需建立与需要发送的业务请求类型数目对应的长连接。其中,业务请求是指用于获取数据的请求。
处理模块202用于确认建立连接。处理模块202当收发模块201收到rspEvent后,确认建立连接。及当收发模块201收到所请求的数据后,处理模块202负责处理并更新数据。其中,当一个连接建立之后,服务器100若有更新的该类型的数据,则会自动发送给客户端200,而无需客户端200再发送获取该类型数据的请求。其中,该处理模块202可以使用javascript脚本来完成。
下面通过实现流程来介绍保持连接的方法。
参见图4,本发明实施例中服务器100端保持连接的方法的主要方法流程如下:
步骤401:接收连接请求并建立连接。
其中,执行模块105在收发模块103收到连接请求后,根据该请求构造建立连接的Event(事件),该Event中封装了消息的类型,设置该事件的类型为connect(连接)。
步骤402:根据连接请求创建消息队列103。
步骤403:通过消息队列103等待需要传输的事件,以保持连接。
参见图5,本发明实施例中客户端200保持连接的方法的主要方法流程如下:
步骤501:当需要请求数据时,发送连接请求。
步骤502:接收确认建立连接的响应事件,确认建立连接。其中,在本发明实施例中,该事件可以是rspEvent。
步骤503:发送用于获取数据的请求,以获取数据。
以上是保持连接的方法在服务器100端及客户端200的主要方法流程,以下通过几个具体的实施例来详细介绍保持连接的方法。
参见图6,本发明实施例中服务器100端保持连接的方法的详细方法流程如下:
步骤601:接收连接请求并建立连接。
步骤602:根据接收的连接请求创建执行模块105。其中,执行模块105中保存了请求的类型及执行模块105的ID等信息。
步骤603:根据接收的连接请求构造建立连接的事件Event。其中,是执行模块105构造该建立连接的事件,该Event中封装了请求的类型,设置该事件的类型为connect(连接)。
步骤604:根据构造的建立连接的事件创建消息队列103。还需创建分发模块104及收发模块101中的浏览器适配器。
步骤605:判断消息队列103中是否有可提取的事件。当判断结果为是时,继续步骤606,否则继续步骤607。
步骤606:从消息队列103中提取事件。继续步骤607。
步骤607:将分发模块104的状态设为等待状态。
当有事件存入消息队列103时,继续步骤608。
步骤608:触发分发模块104提取事件。当消息队列103中有可提取的事件时,将分发模块104的状态设置为工作状态,并触发分发模块104提取事件。当分发模块104提取事件完毕后,将分发模块104的状态设置为等待状态,继续等待提取事件。
步骤609:根据请求的类型构造Command对象。其中,该Command对象定义在Controller中,该Command对象中包含了浏览器适配器的信息。
步骤610:通过执行Command对象构造rspEvent。其中,该rspEvent表示确认建立连接的响应消息,其中包括执行模块105的ID和所请求的类型等信息。
步骤611:向客户端200发送rspEvent,确认建立连接。其中,是收发模块101中的浏览器适配器向客户端200发送rspEvent。
参见图7,本发明实施例中分发模块104通过不断访问消息队列103来获知是否有可提取的事件。详细方法流程如下:
步骤701:接收连接请求并建立连接。
步骤702:根据接收的连接请求创建执行模块105。其中,执行模块105中保存了请求的类型及执行模块105的身份ID等信息。
步骤703:根据接收的连接请求构造建立连接的事件Event。其中,该Event中封装了请求的类型,设置该事件的类型为connect(连接)。
步骤704:根据建立连接的事件创建消息队列103。其中还需创建分发模块104及收发模块101中的浏览器适配器。
步骤705:判断消息队列103中是否有可提取的事件。当判断结果为是时,继续步骤706,否则继续步骤707。
步骤706:从消息队列103中提取事件。
步骤707:访问消息队列103,以获知是否有可提取的事件。
若消息队列103中没有事件,分发模块104可以不断访问消息队列103,以询问的方式获知消息队列103中是否放入了事件。当消息队列103中有事件时,将分发模块104的状态设置为工作状态,分发模块104从消息队列103中提取事件并传递给收发模块,传递完后再将分发模块104的状态设置为等待状态,继续等待提取消息队列103中的事件,如此循环执行,
步骤708:根据请求的类型构造Command对象。其中,该Command对象定义在Controller中,该Command对象中包含了浏览器适配器的信息。
步骤709:通过执行Command对象构造rspEvent。其中,该rspEvent表示已建立连接的确认响应消息,其中包括执行模块105的ID和所请求的数据类型等信息。
步骤710:向客户端200发送rspEvent,确认建立连接。其中,是收发模块101中的浏览器适配器向客户端200发送rspEvent。
参见图8,本发明实施例中是建立连接之后,用于获取数据的方法。较佳的,本发明实施例中以listen(监听)请求为例。详细方法流程如下:
客户端200已收到rspEvent,确认建立连接。
步骤801:接收listen请求。该请求中携带ID。其中,该ID是服务器100向客户端发送rspEvent时其中携带的执行模块105的ID。
其中,该listen请求是一种业务或数据请求,其所请求的数据需要实时更新,在本发明实施例中将请求此类数据的请求称为特殊请求,如果所请求的数据无需实时更新,一次数据传输完毕即可,则这类请求称为非特殊请求。
步骤802:根据接收的listen请求构造Event。
步骤803:根据接收的listen请求中携带的ID确定属于该请求的执行模块105。
步骤804:根据请求的类型及所请求的数据类型等信息构造Command对象。
步骤805:根据Command对象中包含的信息构造rsplistenEvent(确认监听事件)。其中,该rsplistenEvent是对listen请求的响应事件。
步骤806:将执行模块105的ID携带在该rsplistenEvent中,设置rsplistenEvent的属性。其中,所述属性包括传输格式、请求获取的数据类型、消息类型等。
步骤807:激活消息队列103。
步骤808:向消息队列103中添加所请求的事件。
步骤809:判断消息队列中是否有可提取的事件。当判断结果为是时,继续步骤810,否则继续步骤811。
步骤810:从消息队列103中提取事件。
步骤811:将分发模块104的状态设为等待状态。
步骤812:触发分发模块104提取事件。当消息队列103中有可提取的事件时,将分发模块104的状态设置为工作状态,并触发分发模块104提取事件。当分发模块104提取事件完毕后,将分发模块104的状态设置为等待状态,继续等待提取事件。
其中,需激活后台生产数据的线程,从而通过构造模块106向消息队列103中添加所请求的数据,并且是将所请求的数据封装成所请求的事件后添加到消息队列103中。
步骤813:向客户端200发送rsplistenEvent。其中,是通过收发模块101中的浏览器适配器向客户端200发送该rsplistenEvent,以通知客户端200准备接收数据。
步骤814:向客户端200发送所请求的事件。其中,分发模块104将数据传递给收发模块101中的浏览器适配器,由浏览器适配器向客户端200发送所请求的事件。
其中,如果消息队列103的队列中没有事件,表明服务器100没有产生数据,可以向该队列中添加心跳事件,发送到客户端,客户端以此获知服务器100在没有数据产生的情况下工作正常。
其中,在步骤802中,服务器100在接收到业务请求后可以判断出业务请求的类型,如果为特殊请求,则无须关闭连接,执行如上操作;如果为非特殊请求,则服务器100在向客户端200发送完其所请求的数据后即可关闭连接,例如,可以在步骤812完毕后将分发模块104的状态设置为停止状态,分发模块104不必继续等待从消息队列103中提取事件,相当于连接关闭。或者,消息队列103中可以有一个定时器,当定时器超时后消息队列103中依然没有放入所请求的事件,则将分发模块104的等待状态解除,分发模块104不再继续等待提取数据,相当于连接关闭。
本发明实施例中接收连接请求并建立http连接;根据连接请求创建消息队列103;通过消息队列103等待需要传输的事件,以保持连接。在现有技术中,有待发送数据时才会有发送队列,数据发送完毕则该队列也不复存在,因此无法长期保持连接,而在本发明实施例中,消息队列103是与消息相对应,只要接收到消息即创建消息队列103,该消息队列103不是因数据的存在而存在,从而建立了基于http的长连接,提高了http中数据传输的实时性。并且只发送一次获取数据的请求即可不断获取数据,不会使服务器100端及客户端200承受较大负担,使数据传输更加简单、便利,有利于实际应用。为每个执行模块105配置一个ID,一个执行模块105负责一个长连接中的事件传输,使数据传输过程更加精确。当连接建立后,发送请求以获取数据时,可根据该执行模块105的ID找到该执行模块105,通过该执行模块105调用构造模块106中的命令执行器来执行该请求事件命令。每种类型的事件都有专门的浏览器适配器加以输出,提高数据输出的效率。且如果没有数据输出,服务器100还会向客户端200发送心跳事件,以使客户端200获知服务器100在没有数据产生时工作是否正常,使保持连接过程更加完善。并且,本发明实施例当业务请求的类型为非特殊类型,或者当消息队列103的定时器超时后还未在其中放入所请求的事件时,关闭连接,以节约网络资源。
本领域内的技术人员应明白,本发明的实施例可提供为方法、***、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (14)
1.一种保持连接的方法,其特征在于,包括以下步骤:
接收连接请求并建立http连接;
根据连接请求创建消息队列;
通过消息队列等待需要传输的事件,以保持连接;
对http连接进行检测,确定是否需要保持连接,当需要保持连接时,控制消息队列保持连接,当不需要保持连接时,控制消息队列关闭连接。
2.如权利要求1所述的方法,其特征在于,根据连接请求创建消息队列的步骤包括:根据所述连接请求构造建立连接的事件,根据建立连接的事件创建消息队列。
3.如权利要求1或2所述的方法,其特征在于,通过消息队列等待需要传输的事件,以保持连接的步骤包括:在创建消息队列后,将任务的状态设为等待状态,以保持连接;或者,不断的访问消息队列来保持连接。
4.如权利要求1或2所述的方法,其特征在于,在通过消息队列等待需要传输的事件之后还包括步骤:发送确认建立连接的响应消息。
5.如权利要求4所述的方法,其特征在于,发送确认建立连接的响应消息的步骤包括:发送携带用于标识消息队列的标识符ID的确认建立连接的响应消息;
所述方法还包括步骤:接收携带所述ID的业务请求;将所请求的事件存入携带的ID所对应的消息队列。
6.如权利要求1所述的方法,其特征在于,在通过消息队列等待需要传输的事件,以保持连接之后还包括步骤:当消息队列中没有数据封装成的事件时,将心跳事件存入消息队列并发送。
7.如权利要求1所述的方法,其特征在于,在所述消息队列中设有定时器;通过消息队列等待需要传输的事件后,还包括步骤:所述消息队列中的定时器超时时消息队列中仍未有事件放入,则关闭连接;或者
通过消息队列等待需要传输的事件后,还包括步骤:接收业务请求,并在所述业务请求为非特殊请求且请求的业务数据传输完毕时关闭连接,所述非特殊请求为所请求的数据不需要实时更新的请求。
8.一种保持连接的装置,应用于网络侧,其特征在于,包括:
收发模块,用于接收连接请求;
创建模块,用于建立http连接,及根据连接请求创建消息队列;
分发模块,用于通过所述消息队列等待需要传输的事件,以保持连接;
执行模块,用于对http连接进行检测,确定是否需要保持连接,当需要保持连接时,控制消息队列保持连接,当不需要保持连接时,控制消息队列关闭连接。
9.如权利要求8所述的装置,其特征在于,还包括:执行模块,用于根据所述接收的连接请求构造建立连接的事件;
所述创建模块用于根据建立连接的事件创建消息队列。
10.如权利要求8或9所述的装置,其特征在于,所述消息队列还用于将所述分发模块的状态设为等待状态,以保持连接;或者,所述分发模块还用于不断的访问所述消息队列来保持连接。
11.如权利要求8或9所述的装置,其特征在于,所述收发模块还用于发送确认建立连接的响应消息。
12.如权利要求11所述的装置,其特征在于,所述收发模块发送携带用于标识消息队列的ID的确认建立连接的响应消息,及接收携带所述ID的业务请求;
所述装置还包括:构造模块,将所请求的事件存入携带的ID所对应的消息队列。
13.如权利要求8所述的装置,其特征在于,还包括:验证模块,用于当所述消息队列中没有数据封装成的事件传输时,将心跳事件放入所述消息队列;
所述收发模块还用于发送心跳事件。
14.如权利要求8所述的装置,其特征在于,所述消息队列中还包括定时器;所述消息队列还用于当自身的定时器超时时仍未有事件放入,则关闭连接;或者
所述收发模块还用于接收业务请求;所述装置还包括:执行模块,用于当所述业务请求为非特殊请求且请求的业务数据传输完毕时关闭连接,所述非特殊请求为所请求的数据不需要实时更新的请求。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010530233.4A CN102035880B (zh) | 2010-11-02 | 2010-11-02 | 一种保持连接的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010530233.4A CN102035880B (zh) | 2010-11-02 | 2010-11-02 | 一种保持连接的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102035880A CN102035880A (zh) | 2011-04-27 |
CN102035880B true CN102035880B (zh) | 2014-04-30 |
Family
ID=43888197
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010530233.4A Active CN102035880B (zh) | 2010-11-02 | 2010-11-02 | 一种保持连接的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102035880B (zh) |
Families Citing this family (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102843406B (zh) * | 2011-06-24 | 2015-04-22 | 深圳深讯和科技有限公司 | 数据交互方法及*** |
CN102932936A (zh) * | 2011-08-10 | 2013-02-13 | 中兴通讯股份有限公司 | 资源调度的方法及网元 |
CN102340545A (zh) * | 2011-10-31 | 2012-02-01 | 深圳市五巨科技有限公司 | 服务器及其数据处理方法 |
CN102523177A (zh) * | 2011-12-19 | 2012-06-27 | 北京新媒传信科技有限公司 | 一种消息推送服务的实现方法与*** |
CN103428072B (zh) * | 2012-05-23 | 2017-03-08 | 北京大学 | 一种持久化消息的发布方法及*** |
CN105337961B (zh) * | 2012-11-02 | 2018-09-04 | 北京奇虎科技有限公司 | 和客户端进行通信的方法以及服务器 |
CN103166964B (zh) * | 2013-03-06 | 2014-05-14 | 中国人民解放军国防科学技术大学 | 用于超级计算***监控的前后端实时通信方法 |
CN103312593B (zh) * | 2013-06-06 | 2016-04-27 | 青岛海信传媒网络技术有限公司 | 一种消息分发***及方法 |
CN105323047A (zh) * | 2014-06-19 | 2016-02-10 | 中兴通讯股份有限公司 | 一种云***电源管理方法及装置 |
CN104378360B (zh) * | 2014-10-23 | 2016-04-13 | 腾讯科技(深圳)有限公司 | 账号安全提示方法、装置和*** |
CN105208043B (zh) * | 2015-10-13 | 2019-02-12 | 网易(杭州)网络有限公司 | 外网代理模块、内网代理模块、数据传输方法及*** |
CN106850502A (zh) * | 2015-12-04 | 2017-06-13 | 阿里巴巴集团控股有限公司 | 基于长连接的业务请求转发方法、存储方法、装置及*** |
CN106101018A (zh) * | 2016-06-07 | 2016-11-09 | 北京赛思信安技术股份有限公司 | 一种面向分布式海量数据加载***的可靠数据发送方法 |
CN106533961B (zh) * | 2016-12-30 | 2020-08-28 | 中国农业银行股份有限公司 | 一种流量控制方法及装置 |
CN109639795B (zh) * | 2018-12-11 | 2021-12-24 | 广东亿迅科技有限公司 | 一种基于AcitveMQ消息队列的服务管理方法与装置 |
CN110289940A (zh) * | 2019-06-12 | 2019-09-27 | 四川商通实业有限公司 | 定向支付客户端自动切换服务器的方法 |
CN110365802B (zh) * | 2019-08-26 | 2022-11-15 | 北京奇艺世纪科技有限公司 | 一种消息传输方法、消息转发设备及存储介质 |
CN111447263A (zh) * | 2020-03-24 | 2020-07-24 | 中国建设银行股份有限公司 | 一种消息通信*** |
CN113765886B (zh) * | 2021-08-04 | 2023-07-25 | 深圳Tcl新技术有限公司 | 多媒体播放方法、装置、存储介质及电子设备 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6212175B1 (en) * | 1997-04-22 | 2001-04-03 | Telxon Corporation | Method to sustain TCP connection |
CN1972252A (zh) * | 2006-10-13 | 2007-05-30 | 蒋晓海 | 一种移动即时通信中保持通信连接的方法 |
CN101035139A (zh) * | 2007-01-08 | 2007-09-12 | 清华大学 | 宽带无线接入网媒体接入控制层服务质量保证方法 |
CN101083667A (zh) * | 2007-07-04 | 2007-12-05 | 华为技术有限公司 | 通信方法、***和网关设备 |
CN101159739A (zh) * | 2007-09-19 | 2008-04-09 | 腾讯科技(深圳)有限公司 | 一种字幕显示方法及通讯***以及相关设备 |
CN101179435A (zh) * | 2007-11-22 | 2008-05-14 | Ut斯达康通讯有限公司 | 一种主动推送网管事件的方法及网络管理*** |
CN101599982A (zh) * | 2008-06-06 | 2009-12-09 | 广东宇天信通通信科技有限公司 | 手机信息浏览装置、***及实现方法 |
CN101833465A (zh) * | 2010-04-23 | 2010-09-15 | 中国科学院声学研究所 | 一种支持应用程序动态加载运行的嵌入式*** |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
TW576045B (en) * | 2002-09-20 | 2004-02-11 | Ind Tech Res Inst | System for controlling network flow by monitoring download bandwidth |
-
2010
- 2010-11-02 CN CN201010530233.4A patent/CN102035880B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6212175B1 (en) * | 1997-04-22 | 2001-04-03 | Telxon Corporation | Method to sustain TCP connection |
CN1972252A (zh) * | 2006-10-13 | 2007-05-30 | 蒋晓海 | 一种移动即时通信中保持通信连接的方法 |
CN101035139A (zh) * | 2007-01-08 | 2007-09-12 | 清华大学 | 宽带无线接入网媒体接入控制层服务质量保证方法 |
CN101083667A (zh) * | 2007-07-04 | 2007-12-05 | 华为技术有限公司 | 通信方法、***和网关设备 |
CN101159739A (zh) * | 2007-09-19 | 2008-04-09 | 腾讯科技(深圳)有限公司 | 一种字幕显示方法及通讯***以及相关设备 |
CN101179435A (zh) * | 2007-11-22 | 2008-05-14 | Ut斯达康通讯有限公司 | 一种主动推送网管事件的方法及网络管理*** |
CN101599982A (zh) * | 2008-06-06 | 2009-12-09 | 广东宇天信通通信科技有限公司 | 手机信息浏览装置、***及实现方法 |
CN101833465A (zh) * | 2010-04-23 | 2010-09-15 | 中国科学院声学研究所 | 一种支持应用程序动态加载运行的嵌入式*** |
Also Published As
Publication number | Publication date |
---|---|
CN102035880A (zh) | 2011-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102035880B (zh) | 一种保持连接的方法及装置 | |
EP2645636B1 (en) | Home gateway, cloud server, and method for communication therebetween | |
CN101138219B (zh) | 通过网络与客户机通信的方法和*** | |
CN102761864B (zh) | 一种数据传输的方法、***及设备 | |
CN104539743B (zh) | 一种云计算***及其控制方法 | |
CN102333081B (zh) | 认证方法、设备及*** | |
CN107547589A (zh) | 一种数据采集处理方法以及装置 | |
CN108200158B (zh) | 请求传输***、方法、装置及存储介质 | |
WO2010139151A1 (zh) | M2m平台实现多种承载协议并发接入的方法及*** | |
CN101567861B (zh) | 异构应用***之间的数据同步方法及应用*** | |
CN103516587B (zh) | 即时通信客户端断线重连的方法和装置 | |
CN105306418A (zh) | 多应用程序共享通信连接的方法和*** | |
CN108833565A (zh) | 一种监控服务器的方法、装置、服务器和存储介质 | |
CN103138985A (zh) | 一种支撑网业务主机进程控制方法和*** | |
CN101110772B (zh) | 一种处理报文的设备和方法 | |
CN110381058A (zh) | 基于全双工通信协议WebSocket的请求传输方法及装置 | |
CN111935177A (zh) | 一种业务控制方法及装置 | |
CN104463670A (zh) | 一种基于Websocket的银行前置交易***的搭建方法 | |
CN102983988A (zh) | 一种设备代理装置以及网络管理装置 | |
CN105391615A (zh) | 一种基于业务需求的即时通信方法、装置及*** | |
CN107968798A (zh) | 一种网管资源标签获取方法、缓存同步方法、装置及*** | |
CN103457771B (zh) | 一种ha的虚拟机集群的管理方法和设备 | |
CN114143372B (zh) | 一种基于融合网络分流器的端网络控制方法及*** | |
CN103533001A (zh) | 基于http多重代理的通信方法和***、中间代理服务器 | |
CN112367297B (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 | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |