前端发起请求,如:
获取设备时间,
后端收到请求,则向硬件发送读取时间命令
硬件则返回时间到后端,
后端再把时间返回到前端。
问题:
java服务器,如何能在一个请求把数据返回给前端?
这过程中,前端请求需要进入等待,
还有硬件返回过来的报文,有很多,我需要把我需要的其中一条报文作为结果返回给前端
首先前端的HTTP 请求需要设置响应超时时间足够长,长到你可以足够的时间返回数据。
然后后端通过tcp连接去请求数据,这个应该socket编程就能满足吧,把返回的结果,通过HTTP返回给客户端。
socket 利用TCP 连接请求数据的时候应该都封装好了吧,不需要你去检查tcp包(segment)是否出错(tcp会自己检测),也不需要你去tcp的buffer中去拿数据,这些应该都是socket帮你干的。
然后在socket 返回的数据中去找你需要的。如果你要从tcp的buffer中去找你需要的报文,我觉得这是很困难的,因为tcp的数据包是分块的(trunk)根据数据总量和 ip协议,最多可以携带多少byte数据决定的。tcp会在最后把这些块重新拼接在一起。
HttpServer. tcpClient.Wirte("给老子时间");
var resultBuffer = HttpServer. tcpClient.Read("Buffer[定长就行了]")该结构可以直接返回给客户端去解析;
该包足够短,所以完全可以定长,但还是要注意分包,错误检测(如crc或者奇偶等),没写过通讯就试着写一下,这个通讯比较简单。
HttpServer.Response.Write(resultBuffer)