一种数据通信方法、装置及系统.pdf

上传人:54 文档编号:665999 上传时间:2018-03-02 格式:PDF 页数:13 大小:2.04MB
返回 下载 相关 举报
摘要
申请专利号:

CN201310104766.X

申请日:

2013.03.28

公开号:

CN104079398A

公开日:

2014.10.01

当前法律状态:

实审

有效性:

审中

法律详情:

实质审查的生效IPC(主分类):H04L 5/00申请日:20130328|||公开

IPC分类号:

H04L5/00

主分类号:

H04L5/00

申请人:

腾讯科技(深圳)有限公司

发明人:

张春玮

地址:

518044 广东省深圳市福田区振兴路赛格科技园2栋东403室

优先权:

专利代理机构:

深圳中一专利商标事务所 44237

代理人:

张全文

PDF下载: PDF下载
内容摘要

本发明适用于网络技术领域,提供了一种数据通信方法、装置及系统,包括:创建N个端口通道,将所述N个端口通道注册到选择器中,所述N为大于等于1的整数;通过所述选择器监听所述N个端口通道中的M个第一端口通道对应的端口事件,所述M个第一端口通道为分别与M个通信对端建立连接的端口通道,所述M为大于等于1且小于等于N的整数;根据监听到的端口事件执行数据收发操作;在所述数据收发操作完成之后,断开执行所述数据收发操作的第一端口通道与其对应的通信对端的连接。本发明基于JDK实现端口通道的多路复用,提供了一种高性能的数据通信网络框架,基于该网络框架,能够实现机器之间的多线程、高效率的数据通信。

权利要求书

1.  一种数据通信方法,其特征在于,包括:
创建N个端口通道,将所述端口通道注册到选择器中,所述N为大于等于1的整数;
通过所述选择器监听N个所述端口通道中的M个第一端口通道,所述第一端口通道为与通信对端建立了连接的所述端口通道,所述M为大于等于1且小于等于N的整数;
根据监听到的所述第一端口通道的端口事件执行该第一端口通道的数据收发操作;
在所述数据收发操作完成之后,断开该第一端口通道与其对应的通信对端的连接。

2.
  如权利要求1所述的方法,其特征在于,所述将N个所述端口通道注册到选择器中包括:
将N个所述端口通道注册到同一个选择器中。

3.
  如权利要求1所述的方法,其特征在于,所述根据监听到的所述第一端口通道的端口事件执行该第一端口通道的数据收发操作包括:
根据监听到的所述第一端口通道的读事件,调用读方法读取该第一端口通道对应的通信对端发送的数据;
获取来自所述读方法的第一返回值;
若所述第一返回值大于0,继续通过该第一端口通道读取与其对应的通信对端发送的数据;
若所述第一返回值等于0,停止通过该第一端口通道读取与其对应的通信对端发送的数据;
若所述第一返回值小于0,确定该第一端口通道的数据收发操作完成。

4.
  如权利要求1所述的方法,其特征在于,所述根据监听到的所述第一端口通道的端口事件执行该第一端口通道的数据收发操作包括:
根据监听到的所述第一端口通道的写事件,调用写方法,通过该第一端口通道向对应的通信对端发送数据;
获取来自所述写方法的第二返回值;
当所述第二返回值与发送数据的数据长度相同,若还有数据需要发送给该通信对端,则通过该第一端口通道继续向该通信对端发送数据;
当所述第二返回值等于0,若还有数据需要发送给该通信对端,调用注册方法向所述选择器中再次注册所述第一端口通道的写事件,以在再次注册的写事件触发后通过该第一端口通道继续向该通信对端发送数据。

5.
  如权利要求1所述的方法,其特征在于,所述在所述数据收发操作完成之后,断开该第一端口通道与其对应的通信对端的连接包括:
判断该第一端口通道在预设时间内是否再无数据收发操作;
当该第一端口通道在所述预设时间内再无数据收发操作,断开该第一端口通道与其对应的通信对端的连接。

6.
  一种数据通信装置,其特征在于,包括:
创建单元,用于创建N个端口通道,将所述端口通道注册到选择器中,所述N为大于等于1的整数;
监听单元,用于通过所述选择器监听N个所述端口通道中的M个第一端口通道,所述第一端口通道为与通信对端建立了连接的所述端口通道,所述M为大于等于1且小于等于N的整数;
执行单元,用于根据监听到的所述第一端口通道的端口事件执行该第一端口通道的数据收发操作;
连接断开单元,用于在所述数据收发操作完成之后,断开该第一端口通道与其对应的通信对端的连接。

7.
  如权利要求6所述的装置,其特征在于,所述创建单元具体用于将N个所述端口通道注册到同一个选择器中。

8.
  如权利要求6所述的装置,其特征在于,所述执行单元包括:
读方法调用子单元,用于根据监听到的所述第一端口通道的读事件,调用读方法读取该第一端口通道对应的通信对端发送的数据;
读事件执行子单元,用于获取来自所述读方法的第一返回值;若所述第一返回值大于0,所述读事件执行子单元继续通过该第一端口通道读取与其对应的通信对端发送的数据;若所述第一返回值等于0,所述读事件执行子单元停止通过该第一端口通道读取与其对应的通信对端发送的数据;若所述第一返回值小于0,所述读事件执行子单元确定该第一端口通道的数据收发操作完成。

9.
  如权利要求6所述的装置,其特征在于,所述执行单元包括:
写方法调用子单元,用于根据监听到的所述第一端口通道的写事件,调用写方法,通过该第一端口通道向对应的通信对端发送数据;
写事件执行子单元,用于获取来自写方法的第二返回值;当所述第二返回值与发送数据的数据长度相同,若还有数据需要发送给该通信对端,则所述写事件执行子单元通过该第一端口通道继续向该通信对端发送数据;当所述第二返回值等于0,若还有数据需要发送给该通信对端,所述写事件执行子单元调用写方法向所述选择器中再次注册所述第一端口通道的写事件,以在再次注册的写事件触发后通过该第一端口通道继续向该通信对端发送数据。

10.
  如权利要求6所述的装置,其特征在于,所述连接断开单元包括:
判断子单元,用于判断该第一端口通道在预设时间内是否再无数据收发操作;
连接断开子单元,用于当该第一端口通道在所述预设时间内再无数据收发操作,断开该第一端口通道与其对应的通信对端的连接。

11.
  一种数据通信系统,其特征在于,包括数据处理器和如权利要求6~10任一项所述的数据通信装置;
所述数据处理器用于处理所述数据通信装置产生的回调。

12.
  如权利要求11所述的系统,其特征在于,所述系统还包括:
编解码器,用于执行所述数据通信装置和所述数据处理器之间的数据格式 转换。

说明书

一种数据通信方法、装置及系统
技术领域
本发明属于网络技术领域,尤其涉及一种数据通信方法、装置及系统。
背景技术
在计算机数据通信过程中,对于单线程的通信方式,在同一时刻只能有一个客户端成功创建连接,并且直到该客户端通信完成后其他客户端才能与服务器进行连接、通信,若当前正在连接的客户端的通信过程占用了很长时间,将导致其他客户端连接超时。
对于多线程的通信方式,由服务器首先创建多个线程,其中一个为主线程,负责服务器与客户端之间网络连接的建立,其他线程为从线程,负责跟已连接的每个客户端进行数据通信。在上述多线程通信过程中,如果在同一时刻有大量的客户端与服务器进行通信,将导致主线程负荷过大,严重影响了通信效率。
因此,综上所述,现行的单线程以及多线程的通信方式通信效率低下,影响了数据通信系统的性能。
发明内容
本发明实施例提供一种数据通信方法,解决现行的单线程以及多线程的通信方式通信效率低下,影响了数据通信系统的性能的问题。
本发明实施例是这样实现的,一种数据通信方法,包括:
创建N个端口通道,将所述端口通道注册到选择器中,所述N为大于等于1的整数;
通过所述选择器监听N个所述端口通道中的M个第一端口通道,所述第一端口通道为与通信对端建立了连接的所述端口通道,所述M为大于等于1且 小于等于N的整数;
根据监听到的所述第一端口通道的端口事件执行该第一端口通道的数据收发操作;
在所述数据收发操作完成之后,断开该第一端口通道与其对应的通信对端的连接。
本发明实施例的另一目的在于提供一种数据通信装置,包括:
创建单元,用于创建N个端口通道,将所述端口通道注册到选择器中,所述N为大于等于1的整数;
监听单元,用于通过所述选择器监听N个所述端口通道中的M个第一端口通道,所述第一端口通道为与通信对端建立了连接的所述端口通道,所述M为大于等于1且小于等于N的整数;
执行单元,用于根据监听到的所述第一端口通道的端口事件执行该第一端口通道的数据收发操作;
连接断开单元,用于在所述数据收发操作完成之后,断开该第一端口通道与其对应的通信对端的连接
本发明实施例的另一目的在于提供一种数据通信系统,包括数据处理器和如上所述的数据通信装置;
所述数据处理器用于处理所述数据通信装置产生的回调。
本发明实施例基于JDK实现端口通道的多路复用方案,提供了一种高性能的数据通信网络框架,基于该网络框架,能够实现机器之间的多线程、高效率的数据通信。
附图说明
图1是本发明实施例提供的数据通信方法的实现流程图;
图2是本发明实施例提供的数据通信方法步骤S204的具体实现流程图;
图3是本发明另一实施例提供的数据通信方法步骤S204的具体实现流程 图;
图4是本发明实施例提供的数据通信装置的结构框图;
图5是本发明另一实施例提供的数据通信装置的结构框图;
图6是本发明实施例提供的数据通信系统的结构框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例基于Java开发工具库(Java Develop Toolkit,JDK)实现端口通道的多路复用,提供了一种高性能的数据通信网络框架,基于该网络框架,能够实现机器之间的多线程、高效率的数据通信。
图1示出了本发明实施例提供的数据通信方法的实现流程图,详述如下:
在步骤S101中,创建N个端口通道,将所述端口通道注册到选择器中,所述N为大于等于1的整数。
执行步骤S101之前,可以使用JDK中的Selector.open函数来创建选择器(Selector),通过创建选择器,能够在通信端实现多个端口通道,从而保证通信端具备多线程通信的能力。
具体地,首先,可以通过以下指令创建多个端口通道:
对于传输控制协议(Transition Control Protocal,TCP):
ServerSocketChannel.open();
对于用户数据报文协议(User Datagram Protocal,UCP):
DatagramChannel.open();
其次,在创建了多个端口通道之后,进行端口绑定:
对于TCP:
ServerSocketChannel.socket().bind();
对于UCP:
DatagramChannel.socket().bind();
最后,将端口通道注册到选择器上:
对于TCP:
ServerSocketChannel.register();
对于UCP:
DatagramChannel.register()。
作为本发明的一个实施例,可以将多个端口通道均注册到一个选择器上,以实现对多个端口通道的端口事件进行同时监听。
在步骤S102中,通过所述选择器监听N个所述端口通道中的M个第一端口通道,所述第一端口通道为与通信对端建立了连接的所述端口通道,所述M为大于等于1且小于等于N的整数。
在本实施例中,通过JDK中的选择器,能够对所有注册在选择器下的第一端口通道进行监听,其中,第一端口通道为注册在选择器下的、已经同通信对端建立了连接的端口通道。在本实施例中,连接的建立是通过在步骤S101之后,步骤S102之前,由作为客户端的通信端发起连接请求,作为服务器的通信端在收到连接请求后,从连接请求中获知端口通道,从而通过该端口通道建立起与客户端的连接。
需要说明的是,当服务器与客户端采用TCP协议来传输数据时,则需要服务器单独创建一个选择器,并通过定期轮询的方式来监听该选择器中是否有连接事件产生。当监听到有连接事件产生时,则调用serverSocketChannel.accept方法,并且把该端口通道分配给用于监听读事件的选择器,由此创建会话,并将创建的会话用attach方法关联到SocketChannel上。
在步骤S103中,根据监听到的所述第一端口通道的端口事件执行该第一端口通道的数据收发操作。
在本实施例中,监听到的端口事件包括读事件或者写事件,在本发明后续 实施例中,将分别对上述两种事件的处理过程进行详细阐述,在此不再赘述。
在步骤S104中,在所述数据收发操作完成之后,断开该第一端口通道与其对应的通信对端的连接。
在本实施例中,对于与通信对端的连接的第一端口通道,在断开与通信对端的连接之后,使得本端可以回收该端口通道资源,用于其他线程的通信。具体地,步骤S104可以通过依次调用以下三个函数来实现:
SelectionKey.cancel();
SelectionKey.attach(null);
SocketChannel.close()(TCP协议),或者DatagramChannel.close()(UDP协议)。
作为本发明的一个实施例,通过设置定时器,在每进行完一次端口通道的数据收发操作之后,都会开始计时,判断该端口通道是否在预设时间内再无数据收发,如果是的话则认为该端口通道与通信对端的读写操作完成,断开该端口通道与其对应的通信对端的连接。
作为本发明的一个实施例,步骤S103中通过选择器监听到第一端口通道的读事件,则如图2所示,步骤S103具体为:
在步骤S201中,根据监听到的所述第一端口通道的读事件,调用读方法读取该第一端口通道对应的通信对端发送的数据。
例如,可以调用JDK中的SocketChannel.read方法来读取该第一端口通道对应的通信发送的数据。
在步骤S202中,获取来自所述读方法的第一返回值。
具体地,可以使用JDK中的SocketChannel.read方法来读取通信对端发送来的数据,并根据SocketChannel.read方法针对此次读取操作产生的返回值来决定是否继续接收数据。
在步骤S203中,若所述第一返回值大于0,继续通过该第一端口通道读取与其对应的通信对端发送的数据。
若第一返回值大于0,则表示还有来自该通信对端的数据未读取完毕,则继续通过该第一端口通道读取数据。
在本实施例中,当还有来自通信对端的数据未读取完毕时,除了读取剩余数据之外,还需要根据第一返回值的大小来确定剩余数据的大小,从而根据剩余数据的大小来调整读取缓冲区的大小,完成剩余数据的读取。
而对于UDP协议来说,在步骤S203中,当读方法返回的通信对端的地址不为空,则继续通过该第一端口通道读取对应的通信对端发送的数据。
在步骤S204中,若所述第一返回值等于0,停止通过该第一端口通道读取与其对应的通信对端发送的数据。
在本实施例中,若第一返回值等于0,则表示当前不存在来自该通信对端的可读数据,则结束此次该第一端口通道的读取操作。
对于UDP协议来说,在步骤S204中,当读方法返回的通信对端的地址为空,则结束该第一端口通道的读取操作。
在步骤S205中,若所述第一返回值小于0,则确定该第一端口通道的数据收发操作完成。
在本实施例中,若第一返回值小于0,则确定其通信对端已关闭了相应端口通道,那么在本通信端也由此确定该第一端口通道的数据收发操作完成,从而执行步骤S104,即在数据收发操作完成之后,断开该第一端口通道与其对应的通信对端的连接。
对于UDP协议来说,在步骤S205中,当读方法返回的通信对端的地址为空,则也确定所述数据收发操作完成。
具体地,可以调用JDK中的SocketChannel.close方法来断开该第一端口通道与其对应的通信对端的连接。
需要说明的是,在上述读操作过程中,若读方法未返回上面任一种情况的返回值,则认为此次读取操作异常,也需要断开该第一端口通道与其对应的通信对端的连接。
作为本发明的一个实施例,步骤S103中通过选择器监听到第一端口通道的写事件,则如图3所示,步骤S103具体为:
在步骤S301中,根据监听到的所述第一端口通道的写事件,调用写方法,通过该第一端口通道向对应的通信对端发送数据。
例如,可以调用JDK中的SocketChannel.write方法来通过该第一端口通道向对应的通信对端发送数据。
在步骤S302中,获取来自所述写方法的第二返回值。
具体地,可以使用JDK中的SocketChannel.write方法来向通信对端发送数据,并根据SocketChannel.write方法针对此次写操作产生的返回值来获知数据的发送情况。
在步骤S303中,当所述第二返回值与发送数据的数据长度相同,若还有数据需要发送给该通信对端,则通过该第一端口通道继续向该通信对端发送数据。
在步骤S304中,当所述第二返回值等于0,若还有数据需要发送给该通信对端,调用注册方法向所述选择器中再次注册所述第一端口通道的写事件,以在再次注册的写事件触发后通过该第一端口通道继续向该通信对端发送数据。
其中,注册方法可以为JDK中的Selectionkey.interestOps方法。
在本实施例中,当第二返回值等于0时,表明本通信端的写缓冲区已满,需要等待写缓冲区空闲后才能再进行写操作,因此,向选择器再次注册该第一端口通道的写事件,以在再次注册的写事件触发后通过该第一端口通道继续向该通信对端发送数据。
需要说明的是,在上述写操作过程中,若写方法未返回上面任一种情况的返回值,则认为此次读取操作异常,也需要断开该第一端口通道与其对应的通信对端的连接。
图4示出了本发明实施例提供的数据通信装置的结构框图,该装置可以用于运行本发明图1至图3实施例所述的数据通信方法。为了便于说明,仅示出了与本实施例相关的部分。
参照图4,该装置包括:
创建单元41,创建N个端口通道,将所述端口通道注册到选择器中,所述N为大于等于1的整数。
监听单元42,通过所述选择器监听N个所述端口通道中的M个第一端口通道,所述第一端口通道为与通信对端建立了连接的所述端口通道,所述M为大于等于1且小于等于N的整数。
执行单元43,根据监听到的所述第一端口通道的端口事件执行该第一端口通道的数据收发操作。
连接断开单元44,在所述数据收发操作完成之后,断开该第一端口通道与其对应的通信对端的连接。
可选地,所述创建单元41具体用于将N个所述端口通道注册到同一个选择器中。
可选地,如图5所示,所述执行单元43包括:
读方法调用子单元431,根据监听到的所述第一端口通道的读事件,调用读方法读取该第一端口通道对应的通信对端发送的数据。
读事件执行子单元432,获取来自所述读方法的第一返回值;若所述第一返回值大于0,读事件执行子单元432继续通过该第一端口通道读取与其对应的通信对端发送的数据;若所述第一返回值等于0,读事件执行子单元432停止通过该第一端口通道读取与其对应的通信对端发送的数据;若所述第一返回值小于0,读事件执行子单元432确定该第一端口通道的数据收发操作完成。
可选地,如图5所示,所述执行单元43包括:
写方法调用子单元433,根据监听到的所述第一端口通道的写事件,调用写方法,通过该第一端口通道向对应的通信对端发送数据。
写事件执行子单元434,获取来自写方法的第二返回值;当所述第二返回值与发送数据的数据长度相同,若还有数据需要发送给该通信对端,则写事件执行子单元434通过该第一端口通道继续向该通信对端发送数据;当所述第二 返回值等于0,若还有数据需要发送给该通信对端,写事件执行子单元434调用写方法向所述选择器中再次注册所述第一端口通道的写事件,以在再次注册的写事件触发后通过该第一端口通道继续向该通信对端发送数据。
可选地,如图5所示,所述连接断开单元44包括:
判断子单元441,判断该第一端口通道在预设时间内是否再无数据收发操作。
连接断开子单元442,当该第一端口通道在所述预设时间内再无数据收发操作,断开该第一端口通道与其对应的通信对端的连接。
图6示出了本发明实施例提供的数据通信系统的结构框图,为了便于说明,仅示出了与本实施例相关的部分。
在本实施例中,该数据通信系统包括如本发明图4和图5实施例所述的数据通信装置,如图6所示,其可以以网络处理器61的形式存在于该系统中,同时,该系统还包括了数据处理器62,其中:
网络处理器61采用多线程进行多端口监听,用于负责进行包括数据收发、端口管理、超时检测等在内的与通信对端的网络通信相关动作,其具体实现方式可以参照本发明图4和图5所述实施例,在此不再赘述。
数据处理器62负责在与通信对端进行通信的过程中连接创建、连接关闭、通信异常、收到数据时的回调触发,例如,上述实施例中调用SocketChannel.read方法或者SocketChannel.write方法所产生的回调。且为了通信效率考虑,数据处理器62采用数量可控并且跟网络线程分离的线程池。
可选地,该系统还可以包括编解码器63,编解码器63同时与网络处理器61与数据处理器62连接,负责将在网络中传输的二进制数据转换成可供数据处理器62处理的数据格式,同时负责将数据处理器62处理完毕的数据转换成可供网络传输的二进制数据。
在本实施例中,编解码器63在编码时提供Java对象序列化的方法,在解码时提供Java对象返序列化的方法,为了不影响网络处理器的工作,在编码时 将序列化的数据放到一个并发队列(采用JDK提供的ConcurrentLinkedQueue类中),网络处理器61在处理写事件的时候会把序列化的数据发送出去,在此,并发队列的作用是用于解耦网络处理器和数据处理器,保证模块间数据处理的高效性。
需要说明的是,在本实施例中,如图6所示,网络处理器61和数据处理器62均采用多线程进行处理,且均位于各自的受控线程池内,以满足多线程通信的需求。
本发明实施例基于JDK实现端口通道的多路复用方案,提供了一种高性能的数据通信网络框架,基于该网络框架,能够实现机器之间的多线程、高效率的数据通信。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

一种数据通信方法、装置及系统.pdf_第1页
第1页 / 共13页
一种数据通信方法、装置及系统.pdf_第2页
第2页 / 共13页
一种数据通信方法、装置及系统.pdf_第3页
第3页 / 共13页
点击查看更多>>
资源描述

《一种数据通信方法、装置及系统.pdf》由会员分享,可在线阅读,更多相关《一种数据通信方法、装置及系统.pdf(13页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN104079398A43申请公布日20141001CN104079398A21申请号201310104766X22申请日20130328H04L5/0020060171申请人腾讯科技(深圳)有限公司地址518044广东省深圳市福田区振兴路赛格科技园2栋东403室72发明人张春玮74专利代理机构深圳中一专利商标事务所44237代理人张全文54发明名称一种数据通信方法、装置及系统57摘要本发明适用于网络技术领域,提供了一种数据通信方法、装置及系统,包括创建N个端口通道,将所述N个端口通道注册到选择器中,所述N为大于等于1的整数;通过所述选择器监听所述N个端口通道中的M个第一端口通。

2、道对应的端口事件,所述M个第一端口通道为分别与M个通信对端建立连接的端口通道,所述M为大于等于1且小于等于N的整数;根据监听到的端口事件执行数据收发操作;在所述数据收发操作完成之后,断开执行所述数据收发操作的第一端口通道与其对应的通信对端的连接。本发明基于JDK实现端口通道的多路复用,提供了一种高性能的数据通信网络框架,基于该网络框架,能够实现机器之间的多线程、高效率的数据通信。51INTCL权利要求书2页说明书6页附图4页19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书6页附图4页10申请公布号CN104079398ACN104079398A1/2页21一种数据通信方法,。

3、其特征在于,包括创建N个端口通道,将所述端口通道注册到选择器中,所述N为大于等于1的整数;通过所述选择器监听N个所述端口通道中的M个第一端口通道,所述第一端口通道为与通信对端建立了连接的所述端口通道,所述M为大于等于1且小于等于N的整数;根据监听到的所述第一端口通道的端口事件执行该第一端口通道的数据收发操作;在所述数据收发操作完成之后,断开该第一端口通道与其对应的通信对端的连接。2如权利要求1所述的方法,其特征在于,所述将N个所述端口通道注册到选择器中包括将N个所述端口通道注册到同一个选择器中。3如权利要求1所述的方法,其特征在于,所述根据监听到的所述第一端口通道的端口事件执行该第一端口通道的。

4、数据收发操作包括根据监听到的所述第一端口通道的读事件,调用读方法读取该第一端口通道对应的通信对端发送的数据;获取来自所述读方法的第一返回值;若所述第一返回值大于0,继续通过该第一端口通道读取与其对应的通信对端发送的数据;若所述第一返回值等于0,停止通过该第一端口通道读取与其对应的通信对端发送的数据;若所述第一返回值小于0,确定该第一端口通道的数据收发操作完成。4如权利要求1所述的方法,其特征在于,所述根据监听到的所述第一端口通道的端口事件执行该第一端口通道的数据收发操作包括根据监听到的所述第一端口通道的写事件,调用写方法,通过该第一端口通道向对应的通信对端发送数据;获取来自所述写方法的第二返回。

5、值;当所述第二返回值与发送数据的数据长度相同,若还有数据需要发送给该通信对端,则通过该第一端口通道继续向该通信对端发送数据;当所述第二返回值等于0,若还有数据需要发送给该通信对端,调用注册方法向所述选择器中再次注册所述第一端口通道的写事件,以在再次注册的写事件触发后通过该第一端口通道继续向该通信对端发送数据。5如权利要求1所述的方法,其特征在于,所述在所述数据收发操作完成之后,断开该第一端口通道与其对应的通信对端的连接包括判断该第一端口通道在预设时间内是否再无数据收发操作;当该第一端口通道在所述预设时间内再无数据收发操作,断开该第一端口通道与其对应的通信对端的连接。6一种数据通信装置,其特征在。

6、于,包括创建单元,用于创建N个端口通道,将所述端口通道注册到选择器中,所述N为大于等于1的整数;监听单元,用于通过所述选择器监听N个所述端口通道中的M个第一端口通道,所述第一端口通道为与通信对端建立了连接的所述端口通道,所述M为大于等于1且小于等于N权利要求书CN104079398A2/2页3的整数;执行单元,用于根据监听到的所述第一端口通道的端口事件执行该第一端口通道的数据收发操作;连接断开单元,用于在所述数据收发操作完成之后,断开该第一端口通道与其对应的通信对端的连接。7如权利要求6所述的装置,其特征在于,所述创建单元具体用于将N个所述端口通道注册到同一个选择器中。8如权利要求6所述的装置。

7、,其特征在于,所述执行单元包括读方法调用子单元,用于根据监听到的所述第一端口通道的读事件,调用读方法读取该第一端口通道对应的通信对端发送的数据;读事件执行子单元,用于获取来自所述读方法的第一返回值;若所述第一返回值大于0,所述读事件执行子单元继续通过该第一端口通道读取与其对应的通信对端发送的数据;若所述第一返回值等于0,所述读事件执行子单元停止通过该第一端口通道读取与其对应的通信对端发送的数据;若所述第一返回值小于0,所述读事件执行子单元确定该第一端口通道的数据收发操作完成。9如权利要求6所述的装置,其特征在于,所述执行单元包括写方法调用子单元,用于根据监听到的所述第一端口通道的写事件,调用写。

8、方法,通过该第一端口通道向对应的通信对端发送数据;写事件执行子单元,用于获取来自写方法的第二返回值;当所述第二返回值与发送数据的数据长度相同,若还有数据需要发送给该通信对端,则所述写事件执行子单元通过该第一端口通道继续向该通信对端发送数据;当所述第二返回值等于0,若还有数据需要发送给该通信对端,所述写事件执行子单元调用写方法向所述选择器中再次注册所述第一端口通道的写事件,以在再次注册的写事件触发后通过该第一端口通道继续向该通信对端发送数据。10如权利要求6所述的装置,其特征在于,所述连接断开单元包括判断子单元,用于判断该第一端口通道在预设时间内是否再无数据收发操作;连接断开子单元,用于当该第一。

9、端口通道在所述预设时间内再无数据收发操作,断开该第一端口通道与其对应的通信对端的连接。11一种数据通信系统,其特征在于,包括数据处理器和如权利要求610任一项所述的数据通信装置;所述数据处理器用于处理所述数据通信装置产生的回调。12如权利要求11所述的系统,其特征在于,所述系统还包括编解码器,用于执行所述数据通信装置和所述数据处理器之间的数据格式转换。权利要求书CN104079398A1/6页4一种数据通信方法、装置及系统技术领域0001本发明属于网络技术领域,尤其涉及一种数据通信方法、装置及系统。背景技术0002在计算机数据通信过程中,对于单线程的通信方式,在同一时刻只能有一个客户端成功创建。

10、连接,并且直到该客户端通信完成后其他客户端才能与服务器进行连接、通信,若当前正在连接的客户端的通信过程占用了很长时间,将导致其他客户端连接超时。0003对于多线程的通信方式,由服务器首先创建多个线程,其中一个为主线程,负责服务器与客户端之间网络连接的建立,其他线程为从线程,负责跟已连接的每个客户端进行数据通信。在上述多线程通信过程中,如果在同一时刻有大量的客户端与服务器进行通信,将导致主线程负荷过大,严重影响了通信效率。0004因此,综上所述,现行的单线程以及多线程的通信方式通信效率低下,影响了数据通信系统的性能。发明内容0005本发明实施例提供一种数据通信方法,解决现行的单线程以及多线程的通。

11、信方式通信效率低下,影响了数据通信系统的性能的问题。0006本发明实施例是这样实现的,一种数据通信方法,包括0007创建N个端口通道,将所述端口通道注册到选择器中,所述N为大于等于1的整数;0008通过所述选择器监听N个所述端口通道中的M个第一端口通道,所述第一端口通道为与通信对端建立了连接的所述端口通道,所述M为大于等于1且小于等于N的整数;0009根据监听到的所述第一端口通道的端口事件执行该第一端口通道的数据收发操作;0010在所述数据收发操作完成之后,断开该第一端口通道与其对应的通信对端的连接。0011本发明实施例的另一目的在于提供一种数据通信装置,包括0012创建单元,用于创建N个端口。

12、通道,将所述端口通道注册到选择器中,所述N为大于等于1的整数;0013监听单元,用于通过所述选择器监听N个所述端口通道中的M个第一端口通道,所述第一端口通道为与通信对端建立了连接的所述端口通道,所述M为大于等于1且小于等于N的整数;0014执行单元,用于根据监听到的所述第一端口通道的端口事件执行该第一端口通道的数据收发操作;0015连接断开单元,用于在所述数据收发操作完成之后,断开该第一端口通道与其对应的通信对端的连接说明书CN104079398A2/6页50016本发明实施例的另一目的在于提供一种数据通信系统,包括数据处理器和如上所述的数据通信装置;0017所述数据处理器用于处理所述数据通信。

13、装置产生的回调。0018本发明实施例基于JDK实现端口通道的多路复用方案,提供了一种高性能的数据通信网络框架,基于该网络框架,能够实现机器之间的多线程、高效率的数据通信。附图说明0019图1是本发明实施例提供的数据通信方法的实现流程图;0020图2是本发明实施例提供的数据通信方法步骤S204的具体实现流程图;0021图3是本发明另一实施例提供的数据通信方法步骤S204的具体实现流程图;0022图4是本发明实施例提供的数据通信装置的结构框图;0023图5是本发明另一实施例提供的数据通信装置的结构框图;0024图6是本发明实施例提供的数据通信系统的结构框图。具体实施方式0025为了使本发明的目的、。

14、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。0026本发明实施例基于JAVA开发工具库(JAVADEVELOPTOOLKIT,JDK)实现端口通道的多路复用,提供了一种高性能的数据通信网络框架,基于该网络框架,能够实现机器之间的多线程、高效率的数据通信。0027图1示出了本发明实施例提供的数据通信方法的实现流程图,详述如下0028在步骤S101中,创建N个端口通道,将所述端口通道注册到选择器中,所述N为大于等于1的整数。0029执行步骤S101之前,可以使用JDK中的SELECTOROPE。

15、N函数来创建选择器(SELECTOR),通过创建选择器,能够在通信端实现多个端口通道,从而保证通信端具备多线程通信的能力。0030具体地,首先,可以通过以下指令创建多个端口通道0031对于传输控制协议(TRANSITIONCONTROLPROTOCAL,TCP)0032SERVERSOCKETCHANNELOPEN();0033对于用户数据报文协议(USERDATAGRAMPROTOCAL,UCP)0034DATAGRAMCHANNELOPEN();0035其次,在创建了多个端口通道之后,进行端口绑定0036对于TCP0037SERVERSOCKETCHANNELSOCKET()BIND();。

16、0038对于UCP0039DATAGRAMCHANNELSOCKET()BIND();0040最后,将端口通道注册到选择器上0041对于TCP说明书CN104079398A3/6页60042SERVERSOCKETCHANNELREGISTER();0043对于UCP0044DATAGRAMCHANNELREGISTER()。0045作为本发明的一个实施例,可以将多个端口通道均注册到一个选择器上,以实现对多个端口通道的端口事件进行同时监听。0046在步骤S102中,通过所述选择器监听N个所述端口通道中的M个第一端口通道,所述第一端口通道为与通信对端建立了连接的所述端口通道,所述M为大于等于1且。

17、小于等于N的整数。0047在本实施例中,通过JDK中的选择器,能够对所有注册在选择器下的第一端口通道进行监听,其中,第一端口通道为注册在选择器下的、已经同通信对端建立了连接的端口通道。在本实施例中,连接的建立是通过在步骤S101之后,步骤S102之前,由作为客户端的通信端发起连接请求,作为服务器的通信端在收到连接请求后,从连接请求中获知端口通道,从而通过该端口通道建立起与客户端的连接。0048需要说明的是,当服务器与客户端采用TCP协议来传输数据时,则需要服务器单独创建一个选择器,并通过定期轮询的方式来监听该选择器中是否有连接事件产生。当监听到有连接事件产生时,则调用SERVERSOCKETC。

18、HANNELACCEPT方法,并且把该端口通道分配给用于监听读事件的选择器,由此创建会话,并将创建的会话用ATTACH方法关联到SOCKETCHANNEL上。0049在步骤S103中,根据监听到的所述第一端口通道的端口事件执行该第一端口通道的数据收发操作。0050在本实施例中,监听到的端口事件包括读事件或者写事件,在本发明后续实施例中,将分别对上述两种事件的处理过程进行详细阐述,在此不再赘述。0051在步骤S104中,在所述数据收发操作完成之后,断开该第一端口通道与其对应的通信对端的连接。0052在本实施例中,对于与通信对端的连接的第一端口通道,在断开与通信对端的连接之后,使得本端可以回收该端。

19、口通道资源,用于其他线程的通信。具体地,步骤S104可以通过依次调用以下三个函数来实现0053SELECTIONKEYCANCEL();0054SELECTIONKEYATTACH(NULL);0055SOCKETCHANNELCLOSE()(TCP协议),或者DATAGRAMCHANNELCLOSE()(UDP协议)。0056作为本发明的一个实施例,通过设置定时器,在每进行完一次端口通道的数据收发操作之后,都会开始计时,判断该端口通道是否在预设时间内再无数据收发,如果是的话则认为该端口通道与通信对端的读写操作完成,断开该端口通道与其对应的通信对端的连接。0057作为本发明的一个实施例,步骤S。

20、103中通过选择器监听到第一端口通道的读事件,则如图2所示,步骤S103具体为0058在步骤S201中,根据监听到的所述第一端口通道的读事件,调用读方法读取该第一端口通道对应的通信对端发送的数据。说明书CN104079398A4/6页70059例如,可以调用JDK中的SOCKETCHANNELREAD方法来读取该第一端口通道对应的通信发送的数据。0060在步骤S202中,获取来自所述读方法的第一返回值。0061具体地,可以使用JDK中的SOCKETCHANNELREAD方法来读取通信对端发送来的数据,并根据SOCKETCHANNELREAD方法针对此次读取操作产生的返回值来决定是否继续接收数据。

21、。0062在步骤S203中,若所述第一返回值大于0,继续通过该第一端口通道读取与其对应的通信对端发送的数据。0063若第一返回值大于0,则表示还有来自该通信对端的数据未读取完毕,则继续通过该第一端口通道读取数据。0064在本实施例中,当还有来自通信对端的数据未读取完毕时,除了读取剩余数据之外,还需要根据第一返回值的大小来确定剩余数据的大小,从而根据剩余数据的大小来调整读取缓冲区的大小,完成剩余数据的读取。0065而对于UDP协议来说,在步骤S203中,当读方法返回的通信对端的地址不为空,则继续通过该第一端口通道读取对应的通信对端发送的数据。0066在步骤S204中,若所述第一返回值等于0,停止。

22、通过该第一端口通道读取与其对应的通信对端发送的数据。0067在本实施例中,若第一返回值等于0,则表示当前不存在来自该通信对端的可读数据,则结束此次该第一端口通道的读取操作。0068对于UDP协议来说,在步骤S204中,当读方法返回的通信对端的地址为空,则结束该第一端口通道的读取操作。0069在步骤S205中,若所述第一返回值小于0,则确定该第一端口通道的数据收发操作完成。0070在本实施例中,若第一返回值小于0,则确定其通信对端已关闭了相应端口通道,那么在本通信端也由此确定该第一端口通道的数据收发操作完成,从而执行步骤S104,即在数据收发操作完成之后,断开该第一端口通道与其对应的通信对端的连。

23、接。0071对于UDP协议来说,在步骤S205中,当读方法返回的通信对端的地址为空,则也确定所述数据收发操作完成。0072具体地,可以调用JDK中的SOCKETCHANNELCLOSE方法来断开该第一端口通道与其对应的通信对端的连接。0073需要说明的是,在上述读操作过程中,若读方法未返回上面任一种情况的返回值,则认为此次读取操作异常,也需要断开该第一端口通道与其对应的通信对端的连接。0074作为本发明的一个实施例,步骤S103中通过选择器监听到第一端口通道的写事件,则如图3所示,步骤S103具体为0075在步骤S301中,根据监听到的所述第一端口通道的写事件,调用写方法,通过该第一端口通道向。

24、对应的通信对端发送数据。0076例如,可以调用JDK中的SOCKETCHANNELWRITE方法来通过该第一端口通道向对应的通信对端发送数据。0077在步骤S302中,获取来自所述写方法的第二返回值。说明书CN104079398A5/6页80078具体地,可以使用JDK中的SOCKETCHANNELWRITE方法来向通信对端发送数据,并根据SOCKETCHANNELWRITE方法针对此次写操作产生的返回值来获知数据的发送情况。0079在步骤S303中,当所述第二返回值与发送数据的数据长度相同,若还有数据需要发送给该通信对端,则通过该第一端口通道继续向该通信对端发送数据。0080在步骤S304中。

25、,当所述第二返回值等于0,若还有数据需要发送给该通信对端,调用注册方法向所述选择器中再次注册所述第一端口通道的写事件,以在再次注册的写事件触发后通过该第一端口通道继续向该通信对端发送数据。0081其中,注册方法可以为JDK中的SELECTIONKEYINTERESTOPS方法。0082在本实施例中,当第二返回值等于0时,表明本通信端的写缓冲区已满,需要等待写缓冲区空闲后才能再进行写操作,因此,向选择器再次注册该第一端口通道的写事件,以在再次注册的写事件触发后通过该第一端口通道继续向该通信对端发送数据。0083需要说明的是,在上述写操作过程中,若写方法未返回上面任一种情况的返回值,则认为此次读取。

26、操作异常,也需要断开该第一端口通道与其对应的通信对端的连接。0084图4示出了本发明实施例提供的数据通信装置的结构框图,该装置可以用于运行本发明图1至图3实施例所述的数据通信方法。为了便于说明,仅示出了与本实施例相关的部分。0085参照图4,该装置包括0086创建单元41,创建N个端口通道,将所述端口通道注册到选择器中,所述N为大于等于1的整数。0087监听单元42,通过所述选择器监听N个所述端口通道中的M个第一端口通道,所述第一端口通道为与通信对端建立了连接的所述端口通道,所述M为大于等于1且小于等于N的整数。0088执行单元43,根据监听到的所述第一端口通道的端口事件执行该第一端口通道的数。

27、据收发操作。0089连接断开单元44,在所述数据收发操作完成之后,断开该第一端口通道与其对应的通信对端的连接。0090可选地,所述创建单元41具体用于将N个所述端口通道注册到同一个选择器中。0091可选地,如图5所示,所述执行单元43包括0092读方法调用子单元431,根据监听到的所述第一端口通道的读事件,调用读方法读取该第一端口通道对应的通信对端发送的数据。0093读事件执行子单元432,获取来自所述读方法的第一返回值;若所述第一返回值大于0,读事件执行子单元432继续通过该第一端口通道读取与其对应的通信对端发送的数据;若所述第一返回值等于0,读事件执行子单元432停止通过该第一端口通道读取。

28、与其对应的通信对端发送的数据;若所述第一返回值小于0,读事件执行子单元432确定该第一端口通道的数据收发操作完成。0094可选地,如图5所示,所述执行单元43包括0095写方法调用子单元433,根据监听到的所述第一端口通道的写事件,调用写方法,通过该第一端口通道向对应的通信对端发送数据。0096写事件执行子单元434,获取来自写方法的第二返回值;当所述第二返回值与发说明书CN104079398A6/6页9送数据的数据长度相同,若还有数据需要发送给该通信对端,则写事件执行子单元434通过该第一端口通道继续向该通信对端发送数据;当所述第二返回值等于0,若还有数据需要发送给该通信对端,写事件执行子单。

29、元434调用写方法向所述选择器中再次注册所述第一端口通道的写事件,以在再次注册的写事件触发后通过该第一端口通道继续向该通信对端发送数据。0097可选地,如图5所示,所述连接断开单元44包括0098判断子单元441,判断该第一端口通道在预设时间内是否再无数据收发操作。0099连接断开子单元442,当该第一端口通道在所述预设时间内再无数据收发操作,断开该第一端口通道与其对应的通信对端的连接。0100图6示出了本发明实施例提供的数据通信系统的结构框图,为了便于说明,仅示出了与本实施例相关的部分。0101在本实施例中,该数据通信系统包括如本发明图4和图5实施例所述的数据通信装置,如图6所示,其可以以网。

30、络处理器61的形式存在于该系统中,同时,该系统还包括了数据处理器62,其中0102网络处理器61采用多线程进行多端口监听,用于负责进行包括数据收发、端口管理、超时检测等在内的与通信对端的网络通信相关动作,其具体实现方式可以参照本发明图4和图5所述实施例,在此不再赘述。0103数据处理器62负责在与通信对端进行通信的过程中连接创建、连接关闭、通信异常、收到数据时的回调触发,例如,上述实施例中调用SOCKETCHANNELREAD方法或者SOCKETCHANNELWRITE方法所产生的回调。且为了通信效率考虑,数据处理器62采用数量可控并且跟网络线程分离的线程池。0104可选地,该系统还可以包括编。

31、解码器63,编解码器63同时与网络处理器61与数据处理器62连接,负责将在网络中传输的二进制数据转换成可供数据处理器62处理的数据格式,同时负责将数据处理器62处理完毕的数据转换成可供网络传输的二进制数据。0105在本实施例中,编解码器63在编码时提供JAVA对象序列化的方法,在解码时提供JAVA对象返序列化的方法,为了不影响网络处理器的工作,在编码时将序列化的数据放到一个并发队列(采用JDK提供的CONCURRENTLINKEDQUEUE类中),网络处理器61在处理写事件的时候会把序列化的数据发送出去,在此,并发队列的作用是用于解耦网络处理器和数据处理器,保证模块间数据处理的高效性。0106。

32、需要说明的是,在本实施例中,如图6所示,网络处理器61和数据处理器62均采用多线程进行处理,且均位于各自的受控线程池内,以满足多线程通信的需求。0107本发明实施例基于JDK实现端口通道的多路复用方案,提供了一种高性能的数据通信网络框架,基于该网络框架,能够实现机器之间的多线程、高效率的数据通信。0108以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。说明书CN104079398A1/4页10图1图2说明书附图CN104079398A102/4页11图3图4说明书附图CN104079398A113/4页12图5说明书附图CN104079398A124/4页13图6说明书附图CN104079398A13。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 电学 > 电通信技术


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1