java http请求中调用socket/websocket业务
2018-06-15 本文已影响60人
姬拉
关键检索:request等待异步回调并继续执行,http请求挂起等待socket异步回调。
随着智能行业蓬勃发展,难免有一种业务是:APP/web的一个http/https请求,需要获取智能设备的基本信息,又或者,机器人使用ros模块化通信的时候,需要联络各个模块把基本信息回执发回给服务端。
本文章解决的是一个HTTP/HTTPS的请求挂起等待socket异步回调,我们以Java为例。
通信示例
代码过程如下
创建一个回调服务类,我们使用object.wait();来锁定等待当前业务返回,一旦拿到返回结果使用object.notifyAll() 来解锁。
BlockService 代码如下:
BlockService
SocketList
定义接口类,用来回调:
ICallBack
在调用socket发送指令给设备的时候,存储了这个回调ICallBack:
发送消息给设备的时候顺便存储这个CallBack
一旦拿到机器人的返回结果,通过token回调,并且移除这个CallBack,当然一旦超时也要移除这个CallBack,超时移除已经在BlockService中(MyWebSocket.getCallBackMap().remove(blockModel.getKey());):
image.png
最终是回调+object.wait()来起到HTTP挂起效果,由于试验比较少,这里只是提供一种解决方案,具体性能如何,需要发时间写个测试。建议这样业务如果比较多时候还是使用 app<-socket->服务端<-socket->智能设备。这样的通信方案来做。
csdn 需要手机号码绑定,懒得去执行那一步,简书写的排版不大好,有问题的朋友可以加群:367276878 找到群主,一起研究,ios/net/java都是可以的,另外对机器人通信和集群通信也可以互相学习。