2015-09-29 31 views
1

我正在开发将客户端连接到平台(服务器)的代理。该代理基于灰熊框架。我的代理人收到我的客户的请求,将他注册到平台。所以我的经纪人会执行这个操作。然后,我的代理将等待来自平台的操作,并通知客户这些操作。所以我的代理和客户之间的连接将会保持。如果新操作来自平台,我会将服务器推送到客户端,因为我的客户端保持与我的连接。我不希望客户端发送来自平台(轮询)的新操作的请求。我希望我的代理将操作(POST请求)推送到我的客户端。我知道这个服务器推送不同于客户端服务器模式,但我听说可以使用灰熊。可以灰熊做服务器推送,而连接维护到客户端?

到现在为止,我确实发现了一些有助于在Java中实现这个想法的东西。这个来自grizzly的链接https://grizzly.java.net/spdy.html描述了一个服务器推送,但是这个服务器推送不适用于我的情况,因为当一个http请求来自客户端时,推送服务器被执行。

使用灰熊可以实现这个想法吗?

如果是,该怎么办?

Edit1:我发现使用http-server的灰熊框架时会出现另一个问题。我的代理包括我双方的情况:服务器端其中获得来自客户端的请求和客户端,它连接到平台。我的代理会收到客户的请求。基于灰熊的代理将启动一个http处理程序(我的客户端代理)来分析这个请求。在分析请求之后,该处理程序将连接到平台。操作完成后,他将发送给客户端http/1.1 200 OK。如果同一个客户端决定向平台发送一个新的操作,我应该启动一个到平台的新连接,这意味着我为同一个客户端实例化一个新的客户端代理(http-handler)。我的意思是我没有访问旧实例(旧客户端代理),我有义务创建一个新实例,这意味着我需要避免大量流量。 在这个场景中,如果一个处理程序执行其非阻塞操作,那么这个处理程序会丢失,这样我就无法访问他,这意味着我无法从平台获取操作并进行服务器推送。如果我在一段时间内暂停处理程序,所有来自其他客户端的请求都将被阻止,从而无法为客户端提供服务。

回答

0

IMO SPDY或HTTP/2并不适合您的需要,因为正如您公认的那样,他们发送的推送必须始终与最初的客户端到服务器请求相关联。 我建议看看WebSocket [1],[2]。

[1] https://grizzly.java.net/websockets.html [2] https://tyrus.java.net/

+0

好的,我从来没有使用过的WebSockets。我们假设我的代理使用websocket协议。我的客户是否应该使用此协议? – amitakCs

+0

是的,websocket目前支持web浏览器和许多HTTP/websocket客户端。 – alexey

相关问题