灰熊可以在保持与客户端的连接的同时进行服务器推送吗?

can grizzly do a server-push, while connection is maintained to a client?

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

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

是否可以使用 grizzly 实现这个想法?

如果是,怎么做?

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

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

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