Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
webnet
webnet导致的页面被挂起的根本原因探讨
发布于 2020-08-03 10:24:16 浏览:1988
订阅该版
论坛有多个帖子在讨论使用webnet后浏览器加载资源的时候被挂起(网页加载不完整) ![image.png](/uploads/20200803/c1224613a39236590c28459d15a06ec1.png) ---------- 帖子列表如下,一般大家认为是页面资源较多,浏览器会通过多个socket链路来加载资源,由于设备资源有限就会导致页面被挂起。 [WebNet是否不适合比较复杂的网页开发](https://club.rt-thread.org/ask/question/10723.html) [webnet网页被挂起](https://club.rt-thread.org/ask/question/12035.html) [webnet使用浏览器刷新异常问题](https://club.rt-thread.org/ask/question/422132.html) ------------- 理论上来讲页面内容被加载后socket和内存都会释放,资源不足的话大家排队加载就行了,不应该出现永久的阻塞。通过不断的调试,页面被挂起的原因终于找到了,在webnet的接收函数`webnet_session_read()`中增加dump信息发现凡是被挂起的资源其HTTP GET请求的头部的若干字节会被清零,从而导致webnet无法解析HTTP包头最终链接被挂起。 ```c /* wn_session.c */ int webnet_session_read(struct webnet_session *session, char *buffer, int length) { int read_count; /* Read some data */ read_count = recvfrom(session->socket, buffer, length, 0, NULL, NULL); if (read_count <= 0) { session->session_phase = WEB_PHASE_CLOSE; return -1; } LOG_HEX("wb", 16, buffer, read_count); return read_count; } /* 有问题的LOG */ /* D/HEX wb: 0000-000F: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0010-001F: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0020-002F: 00 00 00 00 00 00 0D 0A 43 6F 6E 6E 65 63 74 69 ........Connecti 0030-003F: 6F 6E 3A 20 6B 65 65 70 2D 61 6C 69 76 65 0D 0A on: keep-alive.. 0040-004F: 55 73 65 72 2D 41 67 65 6E 74 3A 20 4D 6F 7A 69 User-Agent: Mozi 0050-005F: 6C 6C 61 2F 35 2E 30 20 28 57 69 6E 64 6F 77 73 lla/5.0 (Windows 0060-006F: 20 4E 54 20 31 30 2E 30 3B 20 57 69 6E 36 34 3B NT 10.0; Win64; 0070-007F: 20 78 36 34 29 20 41 70 70 6C 65 57 65 62 4B 69 x64) AppleWebKi 0080-008F: 74 2F 35 33 37 2E 33 36 20 28 4B 48 54 4D 4C 2C t/537.36 (KHTML, 0090-009F: 20 6C 69 6B 65 20 47 65 63 6B 6F 29 20 43 68 72 like Gecko) Chr 00A0-00AF: 6F 6D 65 2F 38 34 2E 30 2E 34 31 34 37 2E 31 30 ome/84.0.4147.10 00B0-00BF: 35 20 53 61 66 61 72 69 2F 35 33 37 2E 33 36 20 5 Safari/537.36 00C0-00CF: 45 64 67 2F 38 34 2E 30 2E 35 32 32 2E 35 32 0D Edg/84.0.522.52. 00D0-00DF: 0A 41 63 63 65 70 74 3A 20 74 65 78 74 2F 63 73 .Accept: text/cs 00E0-00EF: 73 2C 2A 2F 2A 3B 71 3D 30 2E 31 0D 0A 52 65 66 s,*/*;q=0.1..Ref 00F0-00FF: 65 72 65 72 3A 20 68 74 74 70 3A 2F 2F 31 39 32 erer: http://192 0100-010F: 2E 31 36 38 2E 31 2E 35 2F 73 74 61 74 75 73 5F .168.1.5/status_ 0110-011F: 63 6E 2E 68 74 6D 6C 0D 0A 41 63 63 65 70 74 2D cn.html..Accept- 0120-012F: 45 6E 63 6F 64 69 6E 67 3A 20 67 7A 69 70 2C 20 Encoding: gzip, 0130-013F: 64 65 66 6C 61 74 65 0D 0A 41 63 63 65 70 74 2D deflate..Accept- 0140-014F: 4C 61 6E 67 75 61 67 65 3A 20 7A 68 2D 43 4E 2C Language: zh-CN, 0150-015F: 7A 68 3B 71 3D 30 2E 39 2C 65 6E 3B 71 3D 30 2E zh;q=0.9,en;q=0. 0160-016F: 38 2C 65 6E 2D 47 42 3B 71 3D 30 2E 37 2C 65 6E 8,en-GB;q=0.7,en 0170-017F: 2D 55 53 3B 71 3D 30 2E 36 0D 0A 0D 0A -US;q=0.6.... */ ``` ---------------- 从理论上分析,socket应用层收到了数据说明底层的数据包是正常的,后来通过软件包`netutils`的抓包工具也证实了tcp底层数据是正常的。为何在webnet上接收的包头被清零根本原因未找到,需要rtt官方以及其他坛友一块讨论一下 @几位讨论过此问题的坛友,如有打扰请见谅 @CrisJay @aozima @libing @huo @armink --------- **问题找到了,以太网接收的地方申请内存的方式是参考cube工程,与rtt释放内存用的api对不起来**
查看更多
4
个回答
默认排序
按发布时间排序
armink
2020-08-03
这家伙很懒,什么也没写!
试试直接使用 qemu 跑下你的应用,避免底层移植可能出现的问题
Jone
2020-08-03
写了还是懒
包头为零的数据在控制台上的path为NULL ```c msh />list_webnet #0 client 192.168.1.10:60062 #1 client 192.168.1.10:60067 path: (NULL) #2 client 192.168.1.10:60066 path: (NULL) ``` --------- 试过增加一个全局变量`tmp_buffer`来接收数据再转存到webnet的接收缓存中,`tmp_buffer`的头部也会被清零,这样来看似乎是SAL层或者lwip的问题,只不过是再web服务器程序上表现出来了,如果是这样的话问题就比较严重了
WKJay
认证专家
2020-08-03
wkjay.com
我个人倒是没有遇到过这个问题,之前我的问题是直接会失败而不是挂起,可能需要看看其他坛友有没有类似问题的解决方案了
aozima
2020-08-03
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
楼主分析得较为深入。 请问一下楼主,你用的网络硬件和软件是怎么搭配的?
撰写答案
登录
注册新账号
关注者
0
被浏览
2k
关于作者
Jone
写了还是懒
提问
30
回答
293
被采纳
46
关注TA
发私信
相关问题
1
webnet heap最大使用量。
2
webnet 是否可以做全动态网页,使用内存池来加快速度
3
软件包WebNet示例说明配图不对
4
webnet如何接收客户端post的大量数据
5
webserver的html跳转问题
6
WebDAV上传.shtml文件和.asp文件时出错
7
rt-thread 3.0 lts如何使用webnet
8
MCU探索版+RT_Thread+Webnet的疑问
9
STM32F407+Webnet+TCPServer的问题
10
webnet支持用esp8266等内置协议栈的芯片替换rtt的lwip吗
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
2
RT-Thread 发布 EtherKit开源以太网硬件!
3
rt-thread使用cherryusb实现虚拟串口
4
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
5
《原子操作:程序世界里的“最小魔法单位”解析》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
a1012112796
13
个答案
1
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部