一种报文传输方法技术

技术编号:39514344 阅读:7 留言:0更新日期:2023-11-25 18:51
本发明专利技术公开了一种报文传输方法

【技术实现步骤摘要】
一种报文传输方法、系统、电子设备及可读存储介质


[0001]本专利技术涉及通信领域,特别涉及一种报文传输方法

系统

电子设备及可读存储介质


技术介绍

[0002]当前
TCP

Transmission Control Protocol
,传输控制协议)已经成为
ICT

Information and Communications Technology
,信息与通讯技术)不可缺少的底层技术,在绝大部分的
CPU

Central Processing Unit
,中央处理器)上都会运行着
TCP/IP

Internet Protocol Address
,互联网协议地址)网络协议栈软件,用户态的应用程序以
socket
(套接字)的方式使用
TCP
功能,收发网络报文

发送报文的一般过程是,
APP

Application
,应用程序)调用
socket API

Application Program Interface
,应用程序接口)将数据传入网络协议栈,网络协议栈将数据放入
socket
发送缓冲区中,然后立即或通过定时器超时驱动发送这些数据,在发送流程中,网络协议栈将适当长度的数据封装在报文载荷中,然后逐层调用底层函数执行报文发送功能

上述过程可以在
APP
线程和网络协议栈线程间并行执行,但是在同一时刻只有
APP
线程或网络协议栈线程中的一者能够对发送缓冲区进行访问操作,同时会将发送缓冲区加锁,以使另一者不能对发送缓冲区进行访问操作,这种传输方案使得报文传输效率较低

[0003]因此,如何提供一种解决上述技术问题的方案是本领域技术人员目前需要解决的问题


技术实现思路

[0004]本专利技术的目的是提供一种报文传输方法

系统

电子设备及可读存储介质,避免了网络协议栈线程和应用程序线程对锁的激烈竞争而产生的性能损耗,提高网络性能,提高报文传输效率

[0005]为解决上述技术问题,本专利技术提供了一种报文传输方法,包括:将套接字的发送缓冲区划分为第一缓冲区和第二缓冲区;在所述第一缓冲区,为应用程序线程分配多个报文和多个报文描述符;多个所述报文和多个所述报文描述符一一对应;通过所述报文和其对应的报文描述符构造节点,并将所述节点添加到所述第一缓冲区的第一描述符链表;所述节点中的报文的报文载荷中拷贝有预设长度的应用程序数据;当所述第一描述符链表满足推送条件,将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二描述符链表的尾部,以便网络协议栈线程根据所述第二描述符链表发送报文

[0006]在一示例性实施例中,所述为应用程序线程分配多个报文和多个报文描述符的过程包括:
根据所述应用程序数据的总数据长度和单个报文的最大载荷长度为应用程序线程分配多个报文和多个报文描述符

[0007]在一示例性实施例中,所述为应用程序线程分配多个报文和多个报文描述符之前,所述报文传输方法还包括:确定所述发送缓冲区对应的当前写入长度,若当前写入长度满足预设条件,为应用程序线程分配多个报文和多个报文描述符

[0008]在一示例性实施例中,确定所述发送缓冲区对应的当前写入长度的过程包括:确定应用程序的输入参数中的总数据长度和所述发送缓冲区的剩余长度;将所述总数据长度和所述剩余长度中的较小值作为当前写入长度

[0009]在一示例性实施例中,若当前写入长度满足预设条件,为应用程序线程分配多个报文和多个报文描述符之前,所述报文传输方法还包括:判断当前写入长度是否大于0;若是,判定所述当前写入长度满足所述预设条件;若否,判定所述当前写入长度不满足所述预设条件

[0010]在一示例性实施例中,所述报文传输方法还包括:当检测到写入应用程序数据,在所述第一缓冲区添加当前写入序列号;确定所述发送缓冲区的剩余长度的过程包括:根据第一关系式计算所述发送缓冲区的剩余长度,所述第一关系式为
Lr=Lm


Lc

Ll
);其中,
Lr
为所述剩余长度,
Lm
为所述发送缓冲区的最大长度,
Lc
为所述当前写入序列号,
Ll
为写入序列号的左边界对应的序列号

[0011]在一示例性实施例中,当所述第一描述符链表满足推送条件,将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二描述符链表的尾部之前,所述报文传输方法还包括:确定推入突发值;确定所述第一描述符链表中的所述节点的数量是否达到所述推入突发值;若是,判定所述第一描述符链表满足所述推送条件;若否,判定所述第一描述符链表不满足所述推送条件

[0012]在一示例性实施例中,将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二描述符链表的尾部之前,所述报文传输方法还包括:构造过渡队列;所述过渡队列为无锁队列;当所述第一描述符链表满足所述推送条件,将所述第一描述符链表中的头节点的地址写入所述过渡队列中;将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二描述符链表的尾部的过程包括:从所述过渡队列中获取所述第一描述符链表的头节点的地址;将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二描述符链表的尾部

[0013]在一示例性实施例中,所述报文传输方法还包括:
当所有应用程序数据均拷贝到所述报文的报文载荷中,将套接字设置为与待发送数据对应的第一状态,并将所述套接字的地址写入套接字队列;将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二描述符链表的尾部,以便网络协议栈线程根据所述第二描述符链表发送报文的过程包括:当所述网络协议栈线程监测到所述套接字队列不为空,将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二描述符链表的尾部,以便网络协议栈线程根据所述第二描述符链表发送报文

[0014]在一示例性实施例中,当所述网络协议栈线程监测到所述套接字队列不为空,将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二描述符链表的尾部,以便网络协议栈线程根据所述第二描述符链表发送报文的过程包括:当所述网络协议栈线程监测到所述套接字队列不为空,从所述套接字队列中获取套接字的地址,按所述地址从所述套接字的所述发送缓冲区的过渡队列中获取所述第一描述符链表的头节点的地址,将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种报文传输方法,其特征在于,包括:将套接字的发送缓冲区划分为第一缓冲区和第二缓冲区;在所述第一缓冲区,为应用程序线程分配多个报文和多个报文描述符;多个所述报文和多个所述报文描述符一一对应;通过所述报文和其对应的报文描述符构造节点,并将所述节点添加到所述第一缓冲区的第一描述符链表;所述节点中的报文的报文载荷中拷贝有预设长度的应用程序数据;当所述第一描述符链表满足推送条件,将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二描述符链表的尾部,以便网络协议栈线程根据所述第二描述符链表发送报文
。2.
根据权利要求1所述的报文传输方法,其特征在于,所述为应用程序线程分配多个报文和多个报文描述符的过程包括:根据所述应用程序数据的总数据长度和单个报文的最大载荷长度为应用程序线程分配多个报文和多个报文描述符
。3.
根据权利要求1所述的报文传输方法,其特征在于,所述为应用程序线程分配多个报文和多个报文描述符之前,所述报文传输方法还包括:确定所述发送缓冲区对应的当前写入长度,若当前写入长度满足预设条件,为应用程序线程分配多个报文和多个报文描述符
。4.
根据权利要求3所述的报文传输方法,其特征在于,确定所述发送缓冲区对应的当前写入长度的过程包括:确定应用程序的输入参数中的总数据长度和所述发送缓冲区的剩余长度;将所述总数据长度和所述剩余长度中的较小值作为当前写入长度
。5.
根据权利要求4所述的报文传输方法,其特征在于,若当前写入长度满足预设条件,为应用程序线程分配多个报文和多个报文描述符之前,所述报文传输方法还包括:判断当前写入长度是否大于0;若是,判定所述当前写入长度满足所述预设条件;若否,判定所述当前写入长度不满足所述预设条件
。6.
根据权利要求4所述的报文传输方法,其特征在于,所述报文传输方法还包括:当检测到写入应用程序数据,在所述第一缓冲区添加当前写入序列号;确定所述发送缓冲区的剩余长度的过程包括:根据第一关系式计算所述发送缓冲区的剩余长度,所述第一关系式为
Lr=Lm


Lc

Ll
);其中,
Lr
为所述剩余长度,
Lm
为所述发送缓冲区的最大长度,
Lc
为所述当前写入序列号,
Ll
为写入序列号的左边界对应的序列号
。7.
根据权利要求1所述的报文传输方法,其特征在于,当所述第一描述符链表满足推送条件,将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二描述符链表的尾部之前,所述报文传输方法还包括:确定推入突发值;确定所述第一描述符链表中的所述节点的数量是否达到所述推入突发值;若是,判定所述第一描述符链表满足所述推送条件;若否,判定所述第一描述符链表不满足所述推送条件

8.
根据权利要求1所述的报文传输方法,其特征在于,将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二描述符链表的尾部之前,所述报文传输方法还包括:构造过渡队列;所述过渡队列为无锁队列;当所述第一描述符链表满足所述推送条件,将所述第一描述符链表中的头节点的地址写入所述过渡队列中;将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二描述符链表的尾部的过程包括:从所述过渡队列中获取所述第一描述符链表的头节点的地址;将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二描述符链表的尾部
。9.
根据权利要求8所述的报文传输方法,其特征在于,所述报文传输方法还包括:当所有应用程序数据均拷贝到所述报文的报文载荷中,将套接字设置为与待发送数据对应的第一状态,并将所述套接字的地址写入套接字队列;将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二描述符链表的尾部,以便网络协议栈线程根据所述第二描述符链表发送报文的过程包括:当所述网络协议栈线程监测到所述套接字队列不为空,将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二描述符链表的尾部,以便网络协议栈线程根据所述第二描述符链表发送报文
。10.
根据权利要求9所述的报文传输方法,其特征在于,当所述网络协议栈线程监测到所述套接字队列不为空,将所述第一描述符链表的头节点的地址添加到所述第二缓冲区的第二描述符链表的尾部,以便网络协议栈线程根据所述第二描述符链表发送报文的过程包括:当所述网络协议栈线程监测到所述套接字队列不为空,从所述套接字队列...

【专利技术属性】
技术研发人员:刘富海陈翔
申请(专利权)人:苏州元脑智能科技有限公司
类型:发明
国别省市:

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

1