首页新闻找找看学习计划

如何能在一个请求把tcp 返回的结果返回给前端

0
悬赏园豆:20 [已解决问题] 解决于 2019-08-29 11:54

有个业务

前端发起请求,如:
获取设备时间,
后端收到请求,则向硬件发送读取时间命令
硬件则返回时间到后端,
后端再把时间返回到前端。

问题:
java服务器,如何能在一个请求把数据返回给前端?
这过程中,前端请求需要进入等待,
还有硬件返回过来的报文,有很多,我需要把我需要的其中一条报文作为结果返回给前端

cppwen的主页 cppwen | 初学一级 | 园豆:55
提问于:2019-08-28 13:35
< >
分享
最佳答案
0

首先前端的HTTP 请求需要设置响应超时时间足够长,长到你可以足够的时间返回数据。

然后后端通过tcp连接去请求数据,这个应该socket编程就能满足吧,把返回的结果,通过HTTP返回给客户端。

socket 利用TCP 连接请求数据的时候应该都封装好了吧,不需要你去检查tcp包(segment)是否出错(tcp会自己检测),也不需要你去tcp的buffer中去拿数据,这些应该都是socket帮你干的。

然后在socket 返回的数据中去找你需要的。如果你要从tcp的buffer中去找你需要的报文,我觉得这是很困难的,因为tcp的数据包是分块的(trunk)根据数据总量和 ip协议,最多可以携带多少byte数据决定的。tcp会在最后把这些块重新拼接在一起。

收获园豆:20
Shendu.CC | 小虾三级 |园豆:1947 | 2019-08-29 11:04
其他回答(2)
0

这个图画的很明确了

电磁魔王喵喵 | 园豆:639 (小虾三级) | 2019-08-28 13:51
0

HttpServer. tcpClient.Wirte("给老子时间");

var resultBuffer = HttpServer. tcpClient.Read("Buffer[定长就行了]")该结构可以直接返回给客户端去解析;

该包足够短,所以完全可以定长,但还是要注意分包,错误检测(如crc或者奇偶等),没写过通讯就试着写一下,这个通讯比较简单。

HttpServer.Response.Write(resultBuffer)

花飘水流兮 | 园豆:9820 (大侠五级) | 2019-08-29 00:01
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册