可以用灰熊做服务器推送,同时保持与客户端的连接?

时间:2015-09-29 08:10:50

标签: grizzly server-push

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

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

是否可以使用灰熊来实现这个想法?

如果是的话,怎么做?

Edit1:我在使用grizzly-framework的http-server时发现了另一个问题。我的代理人包括两个方面:服务器端从客户端获取请求,客户端连接到平台。我的代理将收到客户的请求。基于grizzly的代理将启动一个http-handler(我的客户端代理)来分析这个请求。分析完请求后,此处理程序将连接到平台。完成操作后,他将发送给客户端http / 1.1 200 OK。如果同一个客户端决定在平台上发送一个新操作,我应该开始一个新的平台连接,这意味着我为同一个客户端实例化一个新的客户端代理(http-handler)。我的意思是我无法访问旧实例(旧的客户端代理),我不得不创建一个新实例,这意味着我需要避免它的大量流量。 在本说明中,如果处理程序执行其非阻塞操作,则此处理程序将丢失,因此我无法访问他,这意味着我无法从平台获取操作并进行服务器推送。如果我暂停处理程序一段时间,将阻止来自其他客户端的所有请求,因此无法为客户端提供服务。

1 个答案:

答案 0 :(得分:0)

IMO SPDY或HTTP / 2不能很好地满足您的需求,因为您公平地注意到它们发送的推送必须始终与初始的客户端到服务器请求相关联。 我建议看看WebSocket [1],[2]。

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