繁体   English   中英

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

[英]How can I control a java server app listening on multiple ports

首先,请原谅我是否已经回答。 我花了几个小时在Internet(包括stackoverflow)上搜索我的答案/好技巧,但是我发现的内容与我所寻找的不完全相同,因此我决定发布...继续。

我正在编写一个程序,以便通过一台(Windows)计算机上的套接字接收“订阅源”。 我将有6个供稿,因此我正在6个端口(7000-7005)上监听。 每个“提要”将是我要读取/解析并写入数据库的某些数据。 每个套接字上的数据将每15秒发送一次给我(例如,每15秒刷新一次数据)。

我编写了一个简单的Java程序(建模为服务器程序),它将仅在指定的端口上侦听,接收更新并将它们写入数据库。 我们通常将其称为“侦听器”程序。

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

我的问题围绕着控制每个听众。 我想为侦听器创建一个管理界面...我希望能够从CENTRAL脚本/程序控制每个侦听器/端口组合的启动/停止。

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

我对设计的想法/关注的是,如果我对某个提要进行了任何重大更改之后的线程进行了“执行重点”更新,该怎么办? 线程通常是按时间划分的,对吗? 我如何确保这些子线程始终准备好获取更新? 我知道CPU的切换速度很快:-),但是我是否会因为我想的时间限制而错过更新的可能性(虽然很小)?

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

我正在寻找一些解决此问题的技巧/最佳实践。 希望我已经解释了这个问题足够清楚了。 感谢您阅读并发布任何想法/链接等。

时间片是什么意思? TCP的全部目的是验证数据。 即使进程/线程没有响应,数据也不会丢失。 内核将一直保留到连接超时。

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

您不需要多个过程。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM