我有一个Scala应用程序,它一次维护(或尝试)到各种服务器的TCP连接数小时(可能> 24)。每个服务器都会发送一个短约30个字符的消息,每秒约两次。这些消息被馈送到迭代器中,在这些迭代器中它们被解析并最终最终对数据库进行状态更改。需要可靠/持续出站套接字,选项?
如果任何这些连接因任何原因失败,我的应用程序需要不断尝试重新连接,直到我指定了其他方式。任何丢失的信息都是坏的。我无法控制连接的服务器或使用的协议。
可以想象一次会有多达300个这样的连接。没有一个高负载的情况,所以我不认为需要NIO,虽然它可能很好吗?该应用的其他位是高负载。
我正在寻找某种可以保持这些连接尽可能可靠的套接字控制器/管理器。我现在正在运行我自己的阻塞控制器,但由于我对套接字编码(以及所有各种设置,选项,超时等等)没有经验,我怀疑它会实现最佳的正常运行时间。另外我可能需要SSL支持。
NIO会提供任何真正的优势吗?
Netty会是最好的选择吗?我已经看到了正常运行时间示例here,并且正在考虑简单地复制它,但对于较低级别的网络来说是新的,我不确定是否有更好的选择。
即使使用java.net.Socket,检测断开连接和重新连接也应该是微不足道的。 – pedrofurla
我认为你正在寻找一个可靠的消息服务。看看JMS的各种实现。 – EJP
是的,它是微不足道的;正如我上面提到的,我有一些工作。然而,我不确定确保尽可能少地丢失数据包的最佳策略,并且认为这将是一个图书馆或另一个图书馆中“解决”的问题。我想很多情况都会归结为超时猜测策略?太早关闭并重新打开一个套接字,并且丢失了任何数据包。 – Grant