java - 如何在保持当前连接的情况下连接到多个服务器?

标签 java multithreading

我正在用java编写一个应用程序,

该应用程序的工作方式是,它必须连接到专用网络中的每一台服务器,并且只给出一个起始端口和 IP,

我在此应用程序中做的第一件事是连接到命令行指定的 IP 和端口, (通过启动一个新线程)

建立此连接后,我会收到必须连接的更多 IP 和端口的列表。

但是,我还必须通过发送字符串(每 30 秒由协议(protocol)指定)来保持与当前 IP 和端口的“打开”连接;

问题是:一旦我从初始连接收到列表,我就会进入一个无限运行的 while(true) 循环,并每 30 秒发送一个指定的字符串(这让另一端知道我仍然在那里)

但是,由于循环无限运行,我无法连接到其他 IP 和端口,因为我需要跳出循环才能启动新线程来连接到另一个 IP。

我的代码有点麻烦所以我会尝试用伪代码来解释它: (如果有帮助,我可以编辑以发布我的实际代码)

Main:
    port = args[0]
    IP = args[1]
    try{
        new Thread
    }


Thread:
    connect(Ip, Port)
    recieve IPlist
    while(true){ <---- this is where I get stuck
        send ping every 30 seconds
    }

我希望能够维持连接并创建新的连接。 我认为这更多的是一个设计问题,而不是编码问题。

另外,我希望我的问题写得很好,如果您否决它,请告诉我如何改进它。

最佳答案

I want to be able to maintain the connection AND create new ones.

您需要一个在同一个循环中执行这两项操作的循环,

while(true){ <---- this is where I get stuck
    open any connection which need openning
    send ping every 30 seconds
    any thing else.
}

这有一个问题,如果一个连接阻塞,可能会导致你所有的连接无法发送心跳,但实现起来很简单。

或者

您可以让一个单独的线程管理每个连接,根据需要发送心跳,而主线程只关心要建立哪个连接。

或者

您有一个线程用于向所有打开的连接发送心跳,而主线程则管理哪些连接应该打开。

你觉得最简单的取决于你。

关于java - 如何在保持当前连接的情况下连接到多个服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47484538/

相关文章:

java - gradle 与外部项目的循环依赖

multithreading - 当线程中有无限循环时如何获得最低的CPU消耗

c++ - 由于 QCoreApplication 事件循环,QThread 永远不会退出

c++ - 基于 Q3DScatter 的自定义图表,QCustom3DItem 运行缓慢

java - 将多个线程与 RandomAccessFile 一起使用有助于提高性能吗?

返回传递参数实例的 Java 泛型方法

java - 具有两个线程的 IllegalMonitorStateException

java - java中如何让线程等待并通知

java - 通用方法和具有一个更改方法参数的方法体

java - 使用java将jpg图像添加在一起