100元话费+500莫元咨询TCP 黏包服务器怎么处理的问题

2020-01-01 17:38发布

本帖最后由 lindabell 于 2017-1-12 16:42 编辑

事情是这样的,我做了一台设备可以通过app控制,也可以上报温湿度等信息的;使用透传的WIFI模块。
设备从关机到开机会发生很多状态变化,都会上传这些状态;通过串口发送到WIFI模块,然后到服务器。
在服务器接收那边就会出现黏包的现象,由于黏包服务器处理起来非常耗时,应该是3~4s的数据到了数据库看居然花了26s左右。

另外我数据的格式是这样的 55AA+MAC+len+CRC8,黏包就是多包数据被TCP封成一个包了。

希望做个服务器 (要专业做服务器的,不是专业的意见不接受)的坛友,给个意见这样的黏包服务器能不能处理,怎样处理?

注:我是做单片机软件的对服务器一点不懂,但是我需要的是专业的回答,另外回答的不错的;可能还会付费咨询更加详细的,报酬方面可谈。


修改:增加到200元话费,高手希望提示一下
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
88条回答
wt3333
1楼-- · 2020-01-08 11:40
1)问题根源:发送端与wifi配合的问题(wifi接收串口数据未能分包),造成多包数据打入一个tcp包
2)解决:第一个方法-修正发送端打包的粘包问题;第二个方法-在接收的服务器端加入分包机制,收到的数据包放入缓存,然后摘出单数据帧.


只是不明白你的分包处理为什么会那么耗时?(26s-4s = 22s)   应该是处理机制有问题
lindabell
2楼-- · 2020-01-08 12:03
semonpic 发表于 2017-1-13 08:27
我很负责任的告诉你,能做的了。看看我的数据包格式
0xa5a5xxx; xxxx表示协议版本
packetLen ;数据包总长度 ...

能够告诉我你们服务器用的是什么库来做的吗?
zc3909
3楼-- · 2020-01-08 17:51
 精彩回答 2  元偷偷看……
tribear
4楼-- · 2020-01-08 22:31
lindabell 发表于 2017-1-12 20:33
你是做服务器的吗?是做过类似的吗?

我也是做偏底层应用的,这种TCP粘包的问题无论是在上位机还是底层上都会出现,我们实际项目中就是这样处理的.
semonpic
5楼-- · 2020-01-09 03:03
lindabell 发表于 2017-1-13 09:18
能够告诉我你们服务器用的是什么库来做的吗?

netty 自带粘包处理的库
Achin
6楼-- · 2020-01-09 07:36
直接操作以太网的话,写完之后用flush强制写出一下。
不过你用串口转wifi的透传,还要先看一下模块手册上关于它的分包处理是怎么搞的,自动分包发送间隔是多少之类的参数。
这个粘包还可能是模块本身的粘包,你连续两包间隔太小,模块认为它是一包数据,直到你超过它预设的包缓冲区大小才会对外发送。如果是这种情况,配置一下适当减小模块的包缓冲区大小。
另外发送的数据流可以加上帧头帧尾,数据包中针对特定字节进行转义处理。服务器端专门开个线程只负责接收tcp数据加到缓冲队列中,收到数据之后,就根据帧头帧尾来解码分包

一周热门 更多>