需要使用相同连接从服务器进行多次推送

时间:2018-08-21 12:14:26

标签: javascript java http websocket http2

我正在尝试实现一个简单的UI,该UI将显示在服务器控制台中写入的日志。搜索过但找不到符合我要求的解决方案。

根据我的设计,我有一个使用Apache common-io api跟踪日志文件的Java程序。它可以帮助我减少内存开销,我不想在内存中保留大块数据。 因此,当客户端发出请求时,服务器应开始读取文件并递增地发送读取的数据,并应一直显示直到客户端停止接收为止。我不希望发送多个请求,因为那样会使应用程序一次又一次地读取文件,而我又需要维护一个状态/偏移量(可能的解决方案,但避免它)。

我尝试使用异步响应检查JAX-RS,但这似乎无济于事。我不确定HTTP / 2是否会帮助您。

请帮助我了解如何实现此目的,以及是否需要在客户端和服务器端实现套接字编程,或者是否可以使用任何此类协议。我愿意修改技术堆栈。

谢谢

2 个答案:

答案 0 :(得分:0)

您可以使用任何支持持久流连接(有很多)的协议。

如果您已经在使用JAX-RS,那么StreamingOutput可能就是您想要的。

答案 1 :(得分:0)

经过更多的搜索,我终于找到了实现我所提到的方法的一堆方法。在我想解释一下如何无法使用HTTP(特别是Rest)实现它的时候。

HTTP方式:在HTTP和/或HTTP2中,很少有方法可以使用两个版本中的长轮询或使用http2中存在的多路复用属性来创建持久连接。在这两种情况下,TCP中的基础协议都没有太大区别。但是,在HTTP / HTTP2中,事务以服务器一旦接收到请求并发送回响应的方式发生,它不希望客户端再次接收到响应,也不希望客户端也希望接收到响应。因此,一个完整的周期包括一对请求和响应。因此,如果您尝试发送另一个响应,则无法执行此操作,因为客户端和服务器都无法分别接收或发送该响应。 Google中有许多资源可提供更深入的信息。This有很好的解释和参考资料

因此,我尝试检查是否可以使用一些套接字编码来保持连接有效并传输数据。幸运的是,我偶然发现了另一种方法来实现这一目标。

我认为对我的要求更有意义的两个如下。我不会试图解释它们,只是为了避免在此处提供错误的信息,因为我本人正试图获得更多的见识。

1。服务器端事件(SSE)

2。 WebSockets

This将给出有关它们的票价提示。