CN112003767A - 一种模拟报文发送方法 - Google Patents
一种模拟报文发送方法 Download PDFInfo
- Publication number
- CN112003767A CN112003767A CN202010820793.7A CN202010820793A CN112003767A CN 112003767 A CN112003767 A CN 112003767A CN 202010820793 A CN202010820793 A CN 202010820793A CN 112003767 A CN112003767 A CN 112003767A
- Authority
- CN
- China
- Prior art keywords
- buffer
- message
- selector
- substations
- channel
- 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.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/50—Testing arrangements
-
- 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/14—Network analysis or design
- H04L41/145—Network analysis or design involving simulating, designing, planning or modelling of a network
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Security & Cryptography (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明涉及一种模拟报文发送方法,在主站部署客户端,选择若干子站,每个子站部署若干服务端;主站对应的所有变电站的所有保护装置向若干子站发送报文;服务端将报文存储到缓冲区(Buffer);选择器(Selector)扫描各个缓冲区(Buffer),当某一缓冲区(Buffer)写满后,分配对应的可用通道(Channel)发送报文,主站的客户端接收报文。本发明的模拟报文发送方法可以将复杂的子站***简化,用一种模拟程序代替子站进行报文发送工作,由于模拟程序的资源占用极低,大约10台部署了模拟程序的机器就可以完成原本上千台子站才能发送的报文量。本方法可以大幅度降低通讯压力测试对装置的需求,并完整地还原现场通讯环境。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种模拟报文发送方法。
背景技术
目前的以太网测试设备,大多采用的是面向流的阻塞IO方法,服务器还是在使用阻塞式的socket连接。使用ServerSocket.accept方法来创建一个连接。accept方法是阻塞方法,在下一个connection进来之前,accept会阻塞。在一个socket进来之后,Tomcat会在thread pool里面拿出一个thread来处理连接的socket。
以保护信息主站为例,一台保信主站需要接收上千个子站上传的报文,而且报文的种类多样,配置起来十分复杂,仅仅为了进行通讯测试动用上千台子站显然是不可能的,一般只接入10台以内装置进行测试,这样的测试方法由于样本的缺乏,测试效果并不好。
现有技术存在以下缺陷:
1.数据多次拷贝
标准I/O处理,完成一次完整的数据读写,至少需要从底层硬件读到内核空间,再读到用户文件,又从用户空间写入内核空间,再写入底层硬件此外,底层通过write、read等函数进行I/O***调用时,需要传入数据所在缓冲区起始地址和长度由于JVM GC的存在,导致对象在堆中的位置往往会发生移动,移动后传入***函数的地址参数就不是真正的缓冲区地址了可能导致读写出错。
2.操作阻塞
请求建立连接(connect),读取网络I/O数据(read),发送数据(send)等操作是线程阻塞的。当请求连接已建立,读取请求消息,服务端调用read方法时,如果客户端数据还在写入中或者传输中,线程需要在read方法阻塞等待直到数据就绪。为了实现服务端并发响应,每个连接需要独立的线程单独处理,当并发请求量大时为了维护连接,内存、线程切换开销过大。
发明内容
针对现有技术中存在的问题,本发明提供一种模拟报文发送方法,一方面优化数据的读写过程,防止缓冲区地址移位导致数据读写出错;另一方面采用非阻塞IO,实现一个单独的线程对多个输入和输出通道进行管理。
为达到上述目的,本发明提供了一种.一种模拟报文发送方法,包括:
在主站部署客户端,选择若干子站,每个子站部署若干服务端;
主站对应的所有变电站的所有保护装置向若干子站发送报文;服务端将报文存储到缓冲区(Buffer);
选择器(Selector)扫描各个缓冲区(Buffer),当某一缓冲区(Buffer)写满后,分配对应的可用通道(Channel)发送报文,主站的客户端接收报文。
进一步地,所述服务端与保护装置存在对应关系,所述服务端接收对应保护装置发送的报文,存储到缓冲区(Buffer)并发送。
进一步地,选择器(Selector)扫描各个缓冲区(Buffer)已写入数据的大小,与存储空间(capacity)进行对比,如果相同,表明已经写满。
进一步地,每写入一条信息,位置(position)加1,最后一帧是限制(limit),写模式下存储空间(capacity)与限制帧(limit)相等),当位置(position)与限制帧(limit)相等时时,表明已经写满。
进一步地,在服务端创建负责监听IP的套接字(socket)连接;
在主线程中注册特征点IO事件;
当有任何注册的事件发生时,服务端从选择器(Selector)中获得相应的选择键(SelectionKey),从选择键(SelectionKey)中找到发生的事件和所述事件发生的可选通道(SelectableChannel),以获得客户端发送的报文;
抽取服务端的报文,与发送的报文对比结构是否相同,如果均相同,表明主站报文处理能力满足要求;否则表明主站报文处理能力不满足要求。
进一步地,在读模式下,服务端将报文从NIO通道中读入NIO中的缓冲区(Buffer);在写模式下,报文从NIO中的缓冲区(Buffer)写入NIO通道;读报文时,能够读取写入到buffer的所有数据,读完了所有的数据,清空缓冲区。
进一步地,读报文时,清空缓冲区包括调用清除函数(clear)清空整个缓冲区或者调用紧凑函数(compact)清除已经读过的报文。
进一步地,使用跳转函数(flip)实现写模式和读模式的切换。
进一步地,选择至少10个子站,每个子站部署100个客户端。
本发明的上述技术方案具有如下有益的技术效果:
(1)本发明的模拟报文发送方法可以将复杂的子站***简化,用一种模拟程序代替子站进行报文发送工作,由于模拟程序的资源占用极低,大约10台部署了模拟程序的机器就可以完成原本上千台子站才能发送的报文量。本方法可以大幅度降低通讯压力测试对装置的需求,并完整地还原现场通讯环境。
(2)本发明应用了Select机制,将地址信息注册到特定的Selector对象上,这就可以在单线程中利用Selector对象管理大量并发的网络连接,更好的利用了***资源。
(2)本发明采用非阻塞I/O的通信方式,不要求阻塞等待I/O操作完成即可返回,从而减少了管理I/O连接导致的***开销,大幅度提高了***性能。
(3)传统IO数据流处理:直接从数据流中读一个或多个字节传送到通道,直到读取所有字节,传输过程中没有被缓存在任何地方。这意味着,当一个线程调用read或write时,该线程被阻塞,直到有一些数据被读取,或数据完全写入,该线程在此期间不能再处理其它事件;本发明使用缓冲区代替数据流处理,NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取。而不是一直保持线程阻塞,所以直至数据变得可以读取之前,该线程可以继续做其他的事情。一个线程请求写入一些数据到某通道,不需要等待它完全写入,这个线程同时可以去做别的事情,线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道(channel)。
附图说明
图1是Select机制示意图;
图2为NIO的非阻塞模式示意图;
图3为写模式示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明了,下面结合具体实施方式并参照附图,对本发明进一步详细说明。应该理解,这些描述只是示例性的,而并非要限制本发明的范围。此外,在以下说明中,省略了对公知结构和技术的描述,以避免不必要地混淆本发明的概念。
本发明提供一种模拟报文发送方法,包括如下步骤:
(1)在主站部署客户端,选择若干子站,每个子站部署若干服务端。
在服务端程序中创建一个负责监听IP的socket连接后,在主线程中注册感特点IO事件,如可读数据到达,新的套接字等等。当有读或者写等任何注册的事件发生时,可以从Selector中获得相应的SelectionKey,同时从SelectionKey中可以找到发生的事件和该事件所发生的具体的SelectableChannel,以获得客户端发送过来的数据。
(2)主站对应的所有变电站的所有保护装置向若干子站发送报文;服务端将报文存储到缓冲区(Buffer)。
服务端与保护装置存在对应关系,在一个实施例中采用的是简单的tcp连接方式。
使用面向缓冲区的方法代替传统IO面向流的方法。NIO中的Buffer用于和NIO通道进行交互,数据是从通道读入缓冲区或从缓冲区写入到通道中。当向buffer写入数据时,buffer会记录下写了多少数据。一旦要读取数据,需要通过flip()方法将Buffer从写模式切换到读模式。在读模式下,可以读取之前写入到buffer的所有数据。一旦读完了所有的数据,就需要清空缓冲区,让它可以再次被写入。有两种方式能清空缓冲区:调用clear()或compact()方法。clear()方法会清空整个缓冲区。compact()方法只会清除已经读过的数据。任何未读的数据都被移到缓冲区的起始处,新写入的数据将放到缓冲区未读数据的后面。
(3)选择器(Selector)扫描各个缓冲区(Buffer),当某一缓冲区(Buffer)写满后,分配对应的可用通道(Channel)发送报文,主站的客户端接收报文。
重复执行步骤(3),直至完成主站测试。
服务端接收到报文内容存入缓存区(Buffer),首先通过allocate方法在缓存区中给报文分配存储空间(capacity),根据报文类型和长度的不同,可以分配不同大小的存储空间(capacity)。
缓存区(Buffer)具有三个属性:capacity、position以及limit,结合图3。
当写入的时候,存储空间(capacity)的大小代表利用allocate初始化时候的大小,代表这个缓存块的容量,最多只能向这个缓存块中放入capacity个char,long,int,byte等等。当缓存块满了的时候需要将其清空,才能继续往里面写数据。
position:代笔当前位置,初始化值为0,当一个数据写入buffer中的时候,position会移动到下一个可***的buffer单元,因此,position的最大值为position-1,
limit:在写的模式下面,limit表示你最多可以向buffer里面写入多少个buffer数据,在写模式下面,limit=capacity。
当切换到读模式下面,代表最多能读取到多少数据。因此当切换到读模式下面,limit会被置为写模式下面的position值。因此,你能读取到在写模式下面写入的所有值。
之后为报文的转发过程,由于一个selector同时注册多个channel,并且可以扫描Server中的多个Buffer中的报文。由于报文的种类和长度不同,其完成存储的时间也不同。如果采用传统的阻塞性IO方法,这种没有应用selector,channel与buffer一对一直接相连,当buffer中报文没有完成存储,则与其对应的channel只能进行待机,这样会造成资源的浪费。
而非阻塞性方法,Selector通过选择键遍历与其对应的Buffer,只要其中有一个Buffer准备就绪(选择键只需判定Buffer中的capacity属性是否达到最大值,即可判定报文是否存储完成,因此判定速度很快),Selector就会把其中报文分配给一个可用的Channel(由于Buffer中报文的数量远远大于Channel的数量),因此几乎可以保证Channel中时刻都有报文在写入,可以保证Channel被最大化的利用,节约了等待时间。
实施例
作为本发明方法的实际实施例,某主站实际对应1000个保护装置,需要测试1000个保护装置发送报文的数据量,能否正常处理。本发明通过在10个子站上各部署一个服务端程序,每个服务端程序负责接收100个保护装置发送的报文。每个服务端程序具有指定IP,1000个保护装置,分别向指定IP发送的报文,每个服务端程序负责接收与其同网段保护装置发送的报文,分别存储到缓冲区(Buffer)。选择器(Selector)扫描各个缓冲区(Buffer),当某一缓冲区(Buffer)写满后,分配对应的可用通道(Channel)发送报文,主站的客户端负责采集所有子站中服务端发送的报文,客户端与实时库存在逻辑连接,会从客户端读取信息存入实时库。主站原本就拥有将保护信息读取到数据库的能力,客户端依托实时库开发,只需要创建一个实时库和服务端的连接。
本发明的模拟报文发送方法主要应用在以太网通信测试中,并重点解决了通讯压力测试对设备的数量、性能要求过高的问题。可以将复杂的子站***简化,用一种模拟程序代替子站进行报文发送工作,由于模拟程序的资源占用极低,大约10台部署了模拟程序的机器就可以完成原本上千台子站才能发送的报文量。本方法可以大幅度降低通讯压力测试对装置的需求,并完整地还原现场通讯环境。
综上所述,本发明涉及一种模拟报文发送方法,在主站部署客户端,选择若干子站,每个子站部署若干服务端;主站对应的所有变电站的所有保护装置向若干子站发送报文;服务端将报文存储到缓冲区(Buffer);选择器(Selector)扫描各个缓冲区(Buffer),当某一缓冲区(Buffer)写满后,分配对应的可用通道(Channel)发送报文,主站的客户端接收报文。本发明的模拟报文发送方法可以将复杂的子站***简化,用一种模拟程序代替子站进行报文发送工作,由于模拟程序的资源占用极低,大约10台部署了模拟程序的机器就可以完成原本上千台子站才能发送的报文量。本方法可以大幅度降低通讯压力测试对装置的需求,并完整地还原现场通讯环境。
应当理解的是,本发明的上述具体实施方式仅仅用于示例性说明或解释本发明的原理,而不构成对本发明的限制。因此,在不偏离本发明的精神和范围的情况下所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。此外,本发明所附权利要求旨在涵盖落入所附权利要求范围和边界、或者这种范围和边界的等同形式内的全部变化和修改例。
Claims (9)
1.一种模拟报文发送方法,其特征在于,包括:
在主站部署客户端,选择若干子站,每个子站部署若干服务端;
主站对应的所有变电站的所有保护装置向若干子站发送报文;服务端将报文存储到缓冲区(Buffer);
选择器(Selector)扫描各个缓冲区(Buffer),当某一缓冲区(Buffer)写满后,分配对应的可用通道(Channel)发送报文,主站的客户端接收报文。
2.根据权利要求1所述的模拟报文发送方法,其特征在于,所述服务端与保护装置存在对应关系,所述服务端接收对应保护装置发送的报文,存储到缓冲区(Buffer)并发送。
3.根据权利要求1或2所述的模拟报文发送方法,其特征在于,选择器(Selector)扫描各个缓冲区(Buffer)已写入数据的大小,与存储空间(capacity)进行对比,如果相同,表明已经写满。
4.根据权利要求3所述的模拟报文发送方法,其特征在于,每写入一条信息,位置(position)加1,最后一帧是限制(limit),写模式下存储空间(capacity)与限制帧(limit)相等),当位置(position)与限制帧(limit)相等时时,表明已经写满。
5.根据权利要求1或2所述的模拟报文发送方法,其特征在于,
在服务端创建负责监听IP的套接字(socket)连接;
在主线程中注册特征点IO事件;
当有任何注册的事件发生时,服务端从选择器(Selector)中获得相应的选择键(SelectionKey),从选择键(SelectionKey)中找到发生的事件和所述事件发生的可选通道(SelectableChannel),以获得客户端发送的报文;
抽取服务端的报文,与发送的报文对比结构是否相同,如果均相同,表明主站报文处理能力满足要求;否则表明主站报文处理能力不满足要求。
6.根据权利要求1所述的模拟报文发送方法,其特征在于,在读模式下,服务端将报文从NIO通道中读入NIO中的缓冲区(Buffer);在写模式下,报文从NIO中的缓冲区(Buffer)写入NIO通道;读报文时,能够读取写入到buffer的所有数据,读完了所有的数据,清空缓冲区。
7.根据权利要求6所述的模拟报文发送方法,其特征在于,读报文时,清空缓冲区包括调用清除函数(clear)清空整个缓冲区或者调用紧凑函数(compact)清除已经读过的报文。
8.根据权利要求6所述的模拟报文发送方法,其特征在于,使用跳转函数(flip)实现写模式和读模式的切换。
9.根据权利要求1或2所述的模拟报文发送方法,其特征在于,选择至少10个子站,每个子站部署100个客户端。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010820793.7A CN112003767A (zh) | 2020-08-14 | 2020-08-14 | 一种模拟报文发送方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010820793.7A CN112003767A (zh) | 2020-08-14 | 2020-08-14 | 一种模拟报文发送方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112003767A true CN112003767A (zh) | 2020-11-27 |
Family
ID=73473213
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010820793.7A Pending CN112003767A (zh) | 2020-08-14 | 2020-08-14 | 一种模拟报文发送方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112003767A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116962512A (zh) * | 2023-09-20 | 2023-10-27 | 北京信安世纪科技股份有限公司 | 报文处理方法、设备、存储介质和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101282300A (zh) * | 2008-03-03 | 2008-10-08 | 北京航空航天大学 | 一种基于非阻塞机制的http报文处理方法 |
US20100276658A1 (en) * | 2007-07-20 | 2010-11-04 | Macronix International Co., Ltd. | Resistive Memory Structure with Buffer Layer |
CN102811201A (zh) * | 2011-05-31 | 2012-12-05 | 阿里巴巴集团控股有限公司 | Ssl非阻塞通信方法及用于ssl非阻塞通信的服务器 |
CN104217127A (zh) * | 2014-09-18 | 2014-12-17 | 北京四方继保自动化股份有限公司 | 一种pmu动态数据模拟生成方法 |
-
2020
- 2020-08-14 CN CN202010820793.7A patent/CN112003767A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20100276658A1 (en) * | 2007-07-20 | 2010-11-04 | Macronix International Co., Ltd. | Resistive Memory Structure with Buffer Layer |
CN101282300A (zh) * | 2008-03-03 | 2008-10-08 | 北京航空航天大学 | 一种基于非阻塞机制的http报文处理方法 |
CN102811201A (zh) * | 2011-05-31 | 2012-12-05 | 阿里巴巴集团控股有限公司 | Ssl非阻塞通信方法及用于ssl非阻塞通信的服务器 |
CN104217127A (zh) * | 2014-09-18 | 2014-12-17 | 北京四方继保自动化股份有限公司 | 一种pmu动态数据模拟生成方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116962512A (zh) * | 2023-09-20 | 2023-10-27 | 北京信安世纪科技股份有限公司 | 报文处理方法、设备、存储介质和装置 |
CN116962512B (zh) * | 2023-09-20 | 2024-01-05 | 北京信安世纪科技股份有限公司 | 报文处理方法、设备、存储介质和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110365644B (zh) | 一种构建物联网设备高性能监控平台的方法 | |
US7899878B2 (en) | Recording trace messages of processes of a network component | |
CN110134534B (zh) | 基于nio针对大数据分布式***进行消息处理优化的***及方法 | |
CN110737536B (zh) | 一种基于共享内存的消息存储方法和消息读取方法 | |
US9584332B2 (en) | Message processing method and device | |
CN105183299A (zh) | 一种人机界面服务处理***和方法 | |
US8059670B2 (en) | Hardware queue management with distributed linking information | |
WO2021164262A1 (zh) | 虚拟网络的流量采集方法、装置、计算机设备及存储介质 | |
CN108829713A (zh) | 分布式缓存***、缓存同步方法和装置 | |
CN109564502B (zh) | 应用于存储设备中的访问请求的处理方法和装置 | |
US20030056073A1 (en) | Queue management method and system for a shared memory switch | |
CN111177254B (zh) | 一种异构关系型数据库之间数据同步的方法和装置 | |
CN108415962A (zh) | 一种云存储*** | |
CN112003767A (zh) | 一种模拟报文发送方法 | |
CN104199729B (zh) | 一种资源管理方法及*** | |
CN102916902A (zh) | 数据存储方法及装置 | |
CN101155370B (zh) | 一种移动通讯***多流应用中事务的串行处理方法及*** | |
CN115549754B (zh) | 基于核心网的卫星通信高低轨切换方法、设备及存储介质 | |
CN114401072B (zh) | 一种基于hinoc协议的拆帧重排序队列的动态缓存控制方法及*** | |
CN113157611B (zh) | 一种数据传输控制方法、装置、设备及可读存储介质 | |
CN111813519A (zh) | 一种面向iec 61850多客户端的多任务并发测试方法与*** | |
WO1994015438A1 (en) | Device for the conversion of data blocks, frame structured, into atm cells and vice versa | |
Geng et al. | Research on high speed data distribution technology based on kernel state of domestic operating system | |
CN101453386A (zh) | 网络的封包撷取方法 | |
JPH0974410A (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 | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20201127 |
|
RJ01 | Rejection of invention patent application after publication |