假装同步的异步websocket机制

时间:2014-03-06 12:47:01

标签: java android multithreading

我不是在寻找具体的答案,只是一个想法或一个提示。 我有以下问题:

Android应用程序是Web服务的客户端。它有一个线程,它通过http协议发送事件(带有请求ID的XML表单),并为每个请求服务器发送确认,他理解消息权限与授予的事件ID - 服务器是少数客户端的同步器。我想使用websocket协议通过websocket发送事件,但它有点棘手 - 而不是http,我不希望得到每个请求的响应。此外,传入的websocket消息在其他线程中解析。主要机制有点过度生长,我不想从头开始编写所有内容。

我想让这个异步websocket机制假装是同步的。 现在有我的想法 - 在通过websocket发送事件后,我将不再等待5秒钟的响应,这将在其他线程中处理(它以XML形式出现),并且对于请求ID,它将通知正确的暂停线程。我担心Condition.await()和condition.signal不是最好的主意,您怎么看?

根据这个问题,我意识到我在项目这种机制上遇到了问题。你有什么想法,我在哪里可以找到有关良好模式和提示的信息,以避免不良方法?提前谢谢!

1 个答案:

答案 0 :(得分:0)

websocket和HTTP请求之间的唯一区别是当消息进入时缺少HTTP头。在websocket中,您有一个心跳保持连接活动并允许全双工通信,然后您有纯净的有效负载。您的工作是找到您将用于在服务器/客户端中正确路由请求的邮件头。

因此,这不会阻止您通过在接收后立即写入输出流以请求/响应方式进行通信。我建议你看一下RFC

https://tools.ietf.org/html/rfc6455

如果你有点视觉,这个幻灯片可以提供帮助:

http://www.slideshare.net/sergialmar/websockets-with-spring-4

或者如果您想要一些更严肃的实现作为示例,请查看spring的文档:

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html