繁体   English   中英

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

[英]Multiplex many independent full-duplex streams on the very same TCP socket

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

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

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

幸运的是,它们都是TCP。

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

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

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

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

您无法通过TCP以透明的方式执行此操作。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM