java – 在同一个TCP套接字上复用许多独立的全双工流

这可能是每个人在这里问到的最奇怪的问题.我会尽力解释它.

我需要用Java快速开发一个网络应用程序,集成一堆旧的网络应用程序(我已经有了它们的代码)并使一切工作在一起.每个旧的应用程序将成为新的应用程序的子功能;新的基本上是一个“包装”.

显然,这些应用程序中的每一个(由不同的人在不同时间开发)以不同的方式工作,具有不同的协议,消息的语法完全不同(即一些协议使用二进制消息,一些其他使用HTTP类消息,一些其他使用XML)和不同的消息顺序策略(流水线,停止和等待等).

幸运的是,它们都是TCP.

包装器应用程序应该可以在不同的端口打开类似6-7个不同套接字的东西,这对我们的网络管理员来说并不好.他们只需要一个端口上的一个插槽.所以所有的协议都必须粉碎在同一个管道上.

是否有任何纯Java,开箱即用的解决方案,以透明和轻松的方式在同一个TCP套接字上复用和解复用许多独立的全双工流?

或者是否有一个我忘记的更简单的解决方案?

编辑:子流是独立的,即没有由一个子流等待来自另一个子流的子流引起的死锁可能性.

最佳答案 您无法通过TCP以透明的方式执行此操作.

例如,考虑如果您的应用程序通过其中一个“通道”发送请求将会发生什么,这些“通道”依赖于它需要在另一个“通道”上获取的数据.如果网络状况下降了其中一个“通道”的足够数据包导致TCP连接停止(由于TCP窗口)等待响应,您实际上将停止同一TCP连接中的所有其他“通道”,因为它们共享在同一个窗口,你可以陷入僵局

在同一窗口中的每个通道之前不会发生这种情况.

这可能会也可能不会影响您的具体应用 – 但可能会这样,因此这种技术并不透明.如果可能,您可以尝试使用SCTP来克服此问题

点赞