Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何控制在多个端口上侦听的java服务器应用程序_Java_Multithreading - Fatal编程技术网

如何控制在多个端口上侦听的java服务器应用程序

如何控制在多个端口上侦听的java服务器应用程序,java,multithreading,Java,Multithreading,首先,如果这个问题已经得到回答,请原谅我。我花了几个小时在互联网上(包括stackoverflow)搜索我的答案/好的提示,但我发现的并不完全是我想要的,所以我决定发布…来吧 我正在编写一个程序,以便在单个(Windows)计算机上通过套接字接收“提要”。我将有6个feed进入,所以我在6个端口(7000-7005)上收听。每个“提要”都是我想读/解析并写入数据库的特定数据。每个套接字上的数据将每15秒发送给我一次(例如,数据每15秒刷新一次) 我已经编写了一个简单的java程序(建模为服务器程

首先,如果这个问题已经得到回答,请原谅我。我花了几个小时在互联网上(包括stackoverflow)搜索我的答案/好的提示,但我发现的并不完全是我想要的,所以我决定发布…来吧

我正在编写一个程序,以便在单个(Windows)计算机上通过套接字接收“提要”。我将有6个feed进入,所以我在6个端口(7000-7005)上收听。每个“提要”都是我想读/解析并写入数据库的特定数据。每个套接字上的数据将每15秒发送给我一次(例如,数据每15秒刷新一次)

我已经编写了一个简单的java程序(建模为服务器程序),它只需在指定的端口上侦听、接收更新并将它们写入数据库。我们一般称之为“侦听器”程序

我可以在命令行中更改端口,所以我在早期阶段所做的是打开6个命令提示,然后运行java-jar myprogram.jar,我看到了我期望看到的结果。我对这个设置的理解是,我有6个JVM在运行(基本上是6个独立的进程)

我的问题围绕着控制每个听众。我想为侦听器创建一个管理接口…我想能够从一个中央脚本/程序控制每个侦听器/端口组合的启动/停止

我以前使用过线程,并考虑修改我现有的应用程序以启动并创建6个线程来处理每个端口的侦听。然后,我可以从主程序调用命令,通过端口号或某些名称控制子线程

我对该设计的想法/担忧是,如果在线程具有“执行焦点”之后,任何提要发生了重大更改,那么我会得到更新吗?线程通常是时间切片的,对吗?如何确保这些子线程始终准备好获取更新??我知道CPU切换速度很快:-),但我是否有一些(尽管很小)可能因为我认为的时间切片而错过了更新

所以我想保持原样,只运行程序的多个实例,每个实例都绑定到一个特定的端口。好吧,如果我这么做了,我如何从一个地方控制所有实例?我读过一点关于RMI的书,这就是答案吗?因此,我可以针对服务器应用程序的其他实例从控制程序调用“远程”方法


我正在寻找有关此问题场景的一些提示/最佳实践。希望我已经清楚地解释了这个问题。感谢您阅读并发布任何想法/链接等。

您所说的时间选择是什么意思?TCP的全部要点是验证数据。即使进程/线程没有响应,数据也不会丢失。内核将保留它,直到连接超时

我建议通过回调主处理程序(启动线程)来启动侦听不同端口的线程,然后在那里处理消息


您不需要多个进程。

您所说的时间选择是什么意思?TCP的全部要点是验证数据。即使进程/线程没有响应,数据也不会丢失。内核将保留它,直到连接超时

我建议通过回调主处理程序(启动线程)来启动侦听不同端口的线程,然后在那里处理消息


您不需要多个进程。

您的场景绝对没有问题。等待I/O操作(如读取文件、套接字、等待阻塞锁等)的线程将自动从调度中阻止,并将其置于睡眠状态,直到检测到输入。然后,操作系统唤醒休眠线程,以便它们可以读取来自套接字的输入。

您的场景绝对没有问题。等待I/O操作(如读取文件、套接字、等待阻塞锁等)的线程将自动从调度中阻止,并将其置于睡眠状态,直到检测到输入。然后,操作系统唤醒休眠线程,以便它们可以读取来自套接字的输入。

Timeslicing,因为线程有一些时间根据操作系统执行。我无法控制。但正如您所指出的,“内核将一直保持它,直到连接超时”。这一点很好。因此,在这种情况下,将保留发送的新数据。这让事情变得容易多了:-)这句话有什么问题?连接超时后,将不需要存储它,因为您的进程在有机会时没有响应。诚然,内核可能会在通知进程连接已断开之前将数据传递给进程。这就是你所指的不准确吗?编辑:我看到你的编辑,你不需要回答我的问题,我明白:)大概,内核和进程之间也一定有某种超时,这样内核就不会通过缓冲传入的数据来消耗所有可用内存。。。不过,我认为你在现实生活中不太可能遇到这个问题。与网络带宽相比,内存带宽相当宽,因此进程通常有足够的时间处理输入。本文讨论Linux TCP缓冲区和积压:另一个很好的文档:Timeslicing,因为线程可以在操作系统上获得一些执行时间。我无法控制。但正如您所指出的,“内核将一直保持它,直到连接超时”。这一点很好。因此,在这种情况下,将保留发送的新数据。这让事情变得容易多了:-)这句话有什么问题?连接超时后,将不需要存储它,因为您的进程在有机会时没有响应。诚然,内核可能会在通知进程连接已断开之前将数据传递给进程。这就是你所指的不准确吗?编辑:我看到你的e