记录:WEBAPI与Socket连接如何对应一个请求与响应

有三个终端,浏览器、服务器、设备。

浏览器与服务器采用Http通信,服务器与设备采用Socket通信。

发送请求数据的顺序:
浏览器==》服务器==》设备

发送响应数据的顺序:
浏览器《==服务器《==设备

浏览器和服务器不多说,用ajax就行。主要是服务器与设备之间的soket通信。

由于Socket连接是异步多线程而且是全双工,双方可以互相发消息,服务器无法知道设备到底是什么时候回复,回复对应的请求又是哪一个,怎么办呢?

很简单

浏览器请求 WebAPI的时候,设置有超时时间,比如说3秒超时。(如果3秒之内你不给我数据,我就认为没有数据返回)。
在Socket这一端呢,我向Socket发送WebAPI的请求数据。我给WebAPI的请求数据加一个编号,我当然不知道Socket啥时候给我返回数据,所以开了一个异步的线程,只要Socket有返回数据。我就把返回数据存到缓存里(以请求编号为键,缓存数据,这样就可以找到是哪一次请求的数据了,缓存默认30秒过期)。
然后WebAPI请求就在主等待返回数据,肯定不能无限期地等待下去,这里有个请求循环,每个循环 之间延迟100毫秒,最多5次循环。在每次循环中,WebAPI请求都是在缓存中找数据,根据请求编号找对应的返回数据,如果找到请求返回的数据,就直接返回。没找到就循环继续找,直到5次循环结束,还没有找到就认为找不到这条数据。

发送的数据带上编号,比如Guid

然后在监听数据返回的回调里,把这个编号设为键,返回的数据设为值,存放到内存中(比如CaChe)。

所以WEBAPI主线程发送Socket数据完之后就可以用循环去内存取了。取到了就可以返回浏览器了,没取到表示设备没发送过来,就返回错误信息。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值