一种实现路由器中业务与协议栈之间数据交互的方法技术

技术编号:19327714 阅读:52 留言:0更新日期:2018-11-03 14:34
本发明专利技术公开了一种实现路由器中业务与协议栈之间数据交互的方法,包括:业务组件在其与NIO组件之间创建一个SOCKET,并在创建SOCKET时注册一个返回事件的回调函数,构建异步SOCKET;其中,返回事件的回调函数包含处理不同类型的回应消息的处理函数;业务组件调用SOCKETLIB端接口进行数据收发,且每次无需等待NIO组件处理结果,立即返回,进行下一条数据消息处理;NIO组件处理完后生成一条携带处理结果的回应消息,并调用返回事件的回调函数通知业务组件。本发明专利技术采用异步SOCKET调用来实现消息的通知,使得业务无需等待对方执行完毕才返回,完成后,只需要通过调用注册的回调函数来通知业务组件数据到达,实现业务组件的数据处理和I/O操作重叠进行,有效解决了同步阻塞问题。

A method to realize data interaction between service and protocol stack in router

The invention discloses a method for realizing data interaction between service and protocol stack in router, which includes: a SOCKET is created between service component and NIO component, and a callback function of return event is registered when creating SOCKET to construct asynchronous SOCKET; among them, the callback function of return event includes handling different classes. The business component calls the SOCKETLIB interface to send and receive data, and every time it does not need to wait for the result of NIO component processing, it returns immediately to process the next data message; after NIO component processing, it generates a response message with the result of processing, and calls the callback function of the return event. Know business components. The invention adopts asynchronous SOCKET call to realize message notification, so that the service does not need to wait for the other party to complete the execution before returning. After completion, it only needs to call the registered callback function to notify the service component of data arrival, realizing data processing and I/O operation overlap of the service component, effectively solving the synchronous blocking problem.

【技术实现步骤摘要】
一种实现路由器中业务与协议栈之间数据交互的方法
本专利技术涉及通信领域,具体涉及一种实现路由器中业务与协议栈之间数据交互的方法。
技术介绍
目前,路由器平台主要是基于模块化思想,以组件作为最基本的功能单元;一个功能的实现往往需要多个组件之间的交互,业务模块与收发包模块(NIO组件,NetworkInput&Output,高性能收发包组件)分属于不同的组件,统一负责业务数据消息的封装与收发,目前业务组件与NIO组件的协议栈之间数据交互使用同步式的SOCKET,业务组件需要很长时间来等待数据发送成功返回消息,影响业务的处理性能,况且没有统一的编程接口,每种业务都需要选择跨进程间消息,代码冗余利用率也不高。综上所述,亟需一种实现路由器业务与协议栈之间数据交互的新方案,来提高业务处理性能。
技术实现思路
本专利技术所要解决的技术问题是目前业务组件与NIO组件的协议栈之间数据交互使用同步式的SOCKET,业务组件需要很长时间的等待数据发送成功返回消息,业务的处理性能低,且没有统一的编程接口,每种业务都需要选择跨进程间消息,代码冗余利用率也不高的问题。为了解决上述技术问题,本专利技术所采用的本文档来自技高网...

【技术保护点】
1.一种实现路由器中业务与协议栈之间数据交互的方法,其特征在于,包括:步骤S10、业务组件在其与NIO组件之间创建一个SOCKET,并在创建SOCKET时在SOCKET LIB端注册一个返回事件的回调函数,构建异步SOCKET;其中,返回事件的回调函数包含对不同类型的回应消息进行处理的处理函数;步骤S20、业务组件调用SOCKET LIB端接口进行数据收发,且每次无需等待NIO组件处理结果,立即返回,直接进行下一条数据消息的处理;步骤S30、NIO组件处理完成后,生成一条携带处理结果的回应消息,并调用返回事件的回调函数通知对应业务组件。

【技术特征摘要】
1.一种实现路由器中业务与协议栈之间数据交互的方法,其特征在于,包括:步骤S10、业务组件在其与NIO组件之间创建一个SOCKET,并在创建SOCKET时在SOCKETLIB端注册一个返回事件的回调函数,构建异步SOCKET;其中,返回事件的回调函数包含对不同类型的回应消息进行处理的处理函数;步骤S20、业务组件调用SOCKETLIB端接口进行数据收发,且每次无需等待NIO组件处理结果,立即返回,直接进行下一条数据消息的处理;步骤S30、NIO组件处理完成后,生成一条携带处理结果的回应消息,并调用返回事件的回调函数通知对应业务组件。2.如权利要求1所述的方法,其特征在于,SOCKETLIB端与NIO组件间的通信采用PCS和共享内存两种方式;在业务量不大时,业务组件的SOCKETLIB端与NIO组件之间的通信只使用PCS;在业务量较大时,业务组件的SOCKETLIB端与NIO组件之间的控制消息通过PCS实现交互通信;业务组件的SOCKETLIB端与NIO组件之间的数据报文通过共享内存实现交互通信。3.如权利要求2所述的方法,其特征在于,在业务量较大时,业务组件的SOCKETLIB端与NIO组件之间的数据报文通过共享内存实现交互通信,需要在SOCKET创建时,以业务组件为单位申请共享内存;业务组件在SOCKET创建时,通过设置用于判断是否采用共享内存存取数据报文的共享内存标记位,请求NIO组件申请共享内存;NIO组件在SOCKET创建成功后申请共享内存,并映射该共享内存,并将共享内存ID返回给对应业务组件,业务组件根据此共享内存ID同样将对应共享内存映射到本地;其中,所述共享内存包括接收、发送两块共享内存。4.如权利要求3所述的方法,其特征在于,同一业务组件只第一个SOCKET申请共享内存。5.如权利要求3所述的方法,其特征在于,在业务组件的SOCKETLIB端与NIO组件之间的数据报文通过共享内存来实现消息通信时,采用从无到有消息通知的机制,具体为:在发送方向,当SOCKETLIB端发送一个业务数据报文时,先判断发送共享内存队列是否为空,如果为空,在将数据报文存入发送共享内存的同时发送一个通知消息到NIO组件,NIO组件接收到通知消息后,开始依次读取发送共享内存中数据报文,直至将发送共享内存队列读空;如果非空,不发送通知消息,直接将数据报文存入发送共享内存;在接收方向,当NIO组件接收到业务数据报文时,先判断接收共享内存队列是否为空,如果为空,将数据报文存入接收共享内存,并同时发送一个通知消息到SOCKETLIB端,SOCKETLIB端收到通知消息后,连续读取接收共享内存中的数据报文,上送到业务组件,直到接收共享内存队列为空;如果非空,不发送通知消息,直接将数据报文存入接收共享内存。6.如权利要求3所述的方法,其特征在于,在共享内存的读出端设有定时扫描机制;所述定时扫描机制为:在发送共享内存和接收共享内存的读出端设置循环定时器;定时器超时,直接扫描对应的发送共享内存或接收共享内存;如果发送共享内存或接收共享内存队列不为空,则将其中数据报文全部读出。7.如权利要求3所述的方法,其特征在于,步骤S10具体包括以下步骤:步骤S101、业务组件调用SOCKETLIB端接口创建一个套接字SOCKET,并在创建SOCKET时注册一个返回事件的回调函数;步骤S102、业务组件在SOCKETLIB端为SOCKET分配一个在该业务组件上唯一的SOCKET资源,包括在SOCKETLIB端唯一的标识符appfd及关联的数据结构体;步骤S103、将业务组件的返回事件的回调函数绑定到SOCKET资源的数据结构体中;步骤S104、在SOCKETLIB端构建SOCKET创建消息的结构体,发送给NIO组件;其中,结构体携带域参数domain、SOCKET类型type、协议参数protocol和在业务组件上的SOCKET资源的标识符appfd信息;步骤S105、NIO组件收到SOCKETLIB端发送过来的消息,在NIO组件上分配一个全局唯一SOCKET资源给该业务组件对应的SOCKET;步骤S106、NIO组件调用NIO组件内部函数创建SOCKET,获得SOCKET指针,并建立SOCKET指针与在NIO组件上对应SOCKET资源的标识符niofd的映射关系;步骤S107、判断在NIO组件创建SOCKE...

【专利技术属性】
技术研发人员:李涛王奎
申请(专利权)人:烽火通信科技股份有限公司
类型:发明
国别省市:湖北,42

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1