簡體   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