Gra*_*ant 6 java sockets nio scala netty
我有一个Scala应用程序,它一次维护(或尝试)到各种服务器的TCP连接数小时(可能> 24).每个服务器发送一个约30个字符的短消息,大约每秒两次.这些消息被送入迭代器,在那里它们被解析并最终最终对数据库进行状态更改.
如果这些连接中的任何一个因任何原因而失败,我的应用程序需要不断尝试重新连接,直到我另行指定.丢失的任何消息都是Bad.我无法控制我连接的服务器或使用的协议.
可以想象,一次可以有多达300个这样的连接.不是一个高负荷的情况,所以我不认为需要NIO,虽然它可能很好吗?该应用程序的其他位是高负载.
我正在寻找某种插座控制器/管理器,它可以尽可能可靠地保持这些连接.我现在正在运行自己的阻塞控制器,但由于我对套接字编码(以及所有各种设置,选项,超时等)缺乏经验,我怀疑它将实现最佳的正常运行时间.此外,我可能需要在某些时候支持SSL.
NIO会提供任何真正的优势吗?
Netty会是最好的选择吗?我在这里看过Uptime示例,并且只是想复制它,但是对于低级网络的新手,我不确定是否有更好的选择.
然而,我不确定确保尽可能少地丢失数据包的最佳策略,并假设这将是一个库或另一个库中的“已解决”问题。
是的。JMS 就是一个例子。
我想这很大程度上会归结为超时猜测策略?过早关闭并重新打开套接字,您就会丢失途中的所有数据包。
那是对的。这种方法并不可靠,尤其是在连接定期上下变化的情况下。
真正的解决方案包括让另一端跟踪其收到的内容,并让发送方知道何时重新建立连接。如果做不到这一点,你就没有真正的方法来控制损失的数量。(这就是可靠的消息服务所做的......)
我无法控制我连接的服务器。因此,除非有另一种方法使 JMS 适应通用 TCP 流,否则我认为它不会起作用。
是的。如果您尝试手动实现此操作,这同样适用。另一端必须配合。
我想您可以构造一些东西,在每个远程服务器上运行(例如)JMS 端点,并让端点使用 UNIX 域套接字或环回(即 127.0.0.1)与服务器通信。但您仍然有可能丢失消息。
| 归档时间: |
|
| 查看次数: |
399 次 |
| 最近记录: |