2013-03-25 216 views
0

我在網站上尋找我的問題,但似乎我無法找出解決方案。我有Java非阻塞客戶端服務器程序,它運行良好。我以hereJava客戶端/服務器 - 我們可以使服務器作爲客戶端到另一臺服務器嗎?

爲例,我的問題是,如何將服務器作爲客戶端連接到另一臺服務器?現在,我的服務器將有2個監聽端口等待來自客戶端的連接請求,並且已經完成。現在,我想讓服務器在同一時間可以使用不同的端口連接到另一臺服務器。我不知道我該如何實現這一目標。希望有人能提出一些想法。非常感謝你們!

+0

您是否嘗試使用多線程,我的意思是啓動一個具有客戶端代碼並可以連接到其他服務器的線程? – 2013-03-25 08:25:28

+2

只需創建具有客戶端代碼的另一個線程。而已。 – kaysush 2013-03-25 08:27:09

+0

@Sudhanshu我使用nio,它允許我減少線程。 – UserProg 2013-03-25 08:27:13

回答

1

從您的服務器代碼運行客戶端到另一臺服務器。就如此容易。你曾經嘗試過什麼,並且無法在這個場景中完成?您可能想要使用Apache HTTP(它具有同步和異步版本)客戶端或Netty異步HTTP客戶端。 Apache的HTTP客戶端教程here

+0

現在,我不知道應該在哪裏將客戶端代碼放入我的服務器代碼中。我可以放在任何地方嗎? – UserProg 2013-03-25 08:28:15

+0

添加了指向教程的鏈接 - 請檢查。 – maggu 2013-03-25 08:29:56

+0

非常感謝,非常感謝。好像我可以在任何我認爲合適的服務器代碼中執行客戶端代碼的權利? – UserProg 2013-03-25 08:35:59

0

我認爲代理應該排序你。更多here

+0

非常感謝,謝謝。看起來像我以前有什麼。現在我有一個不同的架構。但是,這個想法看起來是一樣的,在需要時連接到另一臺服務器。如我錯了請糾正我。 – UserProg 2013-03-25 08:48:28

+0

代理服務器坐在並等待,正在監聽運行它的本地計算機上的特定端口。一旦對該端口發出請求,代理就會建立到指定遠程主機上指定端口的連接。 – tmwanik 2013-03-25 08:53:34

+0

非常感謝你.... – UserProg 2013-03-28 07:42:30

0

是的,您可以將客戶端代碼放入服務器。就像您可以從Java Servlet中下載HTML頁面一樣。

您的服務器應該有一個處理來自客戶端的傳入請求的「處理程序」組件。在這個處理程序代碼中,可以將您的客戶端代碼連接到不同的服務器。

我想你會感到困惑的是,傳入連接和傳出連接現在都在相同的poll-the-selector循環中處理,或者?據我所知,您可以將對象附加到選擇器鍵上。用它來表明這不是一個傳入連接,而是一個傳出連接,並且處理所有傳出連接與傳入連接不同。您甚至可能必須以某種方式連接這些傳入和傳出連接,以便知道哪個傳出連接匹配哪個傳入連接。