这可能是这里每个人问的最奇怪的问题。我会尽我所能解释的。
我需要用Java快速开发一个网络应用程序,集成一堆旧的网络应用程序(我已经有了它们的代码),并使所有的东西一起工作。每个旧应用程序都将成为新应用程序的一个子功能;新应用程序从根本上说是一个“包装器”。
显然,这些应用程序(在不同时间由不同的人开发)以不同的方式、不同的协议、不同的消息语法(即一些协议使用二进制消息,另一些使用HTTP类消息,另一些使用XML)和不同的消息顺序策略(流水线、停止和等待等)工作。
幸运的是,它们都是TCP。
包装器应用程序应该在不同的端口上打开类似于6-7个不同的套接字,这对我们的网络管理员是不好的。他们只想要一个端口上的一个插座。所以所有的协议都得压在同一根管子上。
在完全相同的TCP套接字(TCP套接字)上,是否有任何纯Java、开箱即用的解决方案来解决复用和解复用--许多独立的全双工流--以透明和无麻烦的方式?
还是有更简单的解决办法我忘记了?
编辑:子流是独立的,也就是说,一个子流等待来自另一个子流的东西不可能导致死锁。
发布于 2011-08-26 15:36:31
您不能在TCP上以透明的方式这样做。
例如,考虑如果应用程序通过一个“通道”发送请求,该请求取决于它在另一个“通道”上获得的数据。如果一个网络条件丢弃了一个“通道”的足够数据包,导致您的TCP连接停止(由于TCP窗口)等待响应,您实际上是在同一个TCP连接中延迟所有其他“通道”,因为它们共享相同的窗口,您可能会陷入死锁。
在此之前,在同一个窗口中的每个通道上都不会发生这种情况。
这可能影响或不影响您的特定应用程序--但它可能会影响您的应用程序,因此这种技术是不透明的。如果可能的话,您可以尝试使用SCTP来克服这个问题。
https://stackoverflow.com/questions/7207069
复制相似问题