现在的情况是这样的,Java 接收 HTTP 请求,在这个 HTTP 请求中会使用到 Websocket 去请求其他数据,怎么在这个 HTTP 中同步等待 Websocket 的业务返回?代码如下,主要是 Websocket 收到消息是走 OnMessage,我没想出好办法做这个处理,目前的处理办法就是在接到 HTTP 请求的时候,往数据库里加一条记录,然后一直使用这个记录 ID 循环查询数据库,当 Websocket 返回数据了,就将数据写入数据库并改变那条记录的状态,HTTP 请求里就直接相当于在数据库里查询到 Websocket 的业务返回,虽然这样做我是可以暂时完成功能,但好像感觉不太靠谱,求大神指点一下
public class TestController {
@Autowired
private MyWebSocket myWebSocket;
@RequestMapping("/test")
public Object test(){
myWebSocket.sendText("ceshi");
return xxx;
}
}
@ServerEndpoint(port = 9898)
@Component
public class MyWebSocket {
private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>());
@OnOpen
public void onOpen(Session session, HttpHeaders headers, ParameterMap parameterMap) throws IOException {
System.out.println("new connection");
sessions.add(session);
}
@OnMessage
public void onMessage(Session session, String message) {
System.out.println(message);
if ("heart".equals(message)) {
session.sendText("heart");
}else {
session.sendText(message);
}
}
public void sendText(String msg) {
for (Session session: sessions) {
session.sendText(msg);
}
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.