有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

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

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

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

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

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

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

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


共 (1) 个答案

  1. # 1 楼答案

    你说的拖延是什么意思?TCP的关键在于数据是经过验证的。即使进程/线程没有响应,数据也不会丢失。内核将一直保留它,直到连接超时

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

    你不需要多个过程