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条回答
EMC菜鸟
1楼-- · 2020-01-09 13:13
就像上面很多兄弟说的,TCP是传输“数据流”的,本来不存在什么包的概念!不过以我接触到的软件人员来说,十个里面有九个都图省事而直接处理包的 ......
chinaye2
2楼-- · 2020-01-09 15:02
 精彩回答 2  元偷偷看……
abutter
3楼-- · 2020-01-09 19:41
TCP 是基于流的,小包组大包是常见的,再服务程序端拆开就好了,所有把数据看作是流的都需要做这样的事情。服务器的 CPU 是啥,用什么做的 Sever?数据库是啥?
rundream
4楼-- · 2020-01-10 00:40
本帖最后由 rundream 于 2017-1-13 13:09 编辑

方法1: LEN+DATA 模式,需要双方通信层都做分包处理, 不仅仅考虑黏包,还要考虑断包。处理好了,非常稳定,我已经这么用了10年了。

方法2:用7E作为帧间隔符,内容层7E等字符 转义为7D 5E等 , ....,参照PPP协议。

lindabell
5楼-- · 2020-01-10 03:01
打听到使用的是mina框架,这个框架处理不了这类数据吗?
acmilannast
6楼-- · 2020-01-10 04:28
问题出在做服务器人那边,他们应该只做业务端,可能都没接触过socket数据流类通讯解析。
这种架构下,最好加一级中间件,你可以用c语言写,基本分3个线程,第一个就是接收并丢到内存数据池(保证不丢tcp包是这个线程主要任务);第二个就是拆包,将数据池内容再拆成一个一个数据包,第三个对接业务服务器,可以数据包直接扔过去,或者按照服务器要求转出其他格式等等。
这一级基本可以解耦数据流跟业务,这一级最好做硬件的一起做掉

一周热门 更多>