通過Java套接字連續發送一系列數據(浮點數組)從服務器發送到客戶端的最佳方式是什麼?例如,我有一臺每1ms產生一次浮點數據的服務器,我想將這些數據發送給客戶端。我的計劃是把這個過程放在一個線程中(服務器端)並不斷髮送給客戶端。是否有可能通過Java套接字實現這一點?還是應該在將數據發送到客戶端之前先將數據寫入文件?通過Java套接字連續發送數據
謝謝!
通過Java套接字連續發送一系列數據(浮點數組)從服務器發送到客戶端的最佳方式是什麼?例如,我有一臺每1ms產生一次浮點數據的服務器,我想將這些數據發送給客戶端。我的計劃是把這個過程放在一個線程中(服務器端)並不斷髮送給客戶端。是否有可能通過Java套接字實現這一點?還是應該在將數據發送到客戶端之前先將數據寫入文件?通過Java套接字連續發送數據
謝謝!
通過套接字進行此操作應該沒有問題。基本上,您在服務器端建立一個線程,以便在提供新套件時發送數據。
然後在客戶端,設置一個線程,不斷監聽套接字,讀取並解包數據(如果可用),將其發佈到某處以便客戶端的處理代碼使用它,然後返回到poll /睡眠週期,直到服務器發送更多數據。
只要確保在客戶端提供了一個方法,如果套接字關閉(服務器關閉,網絡連接等),則會終止偵聽器線程。
只要客戶端保持連接打開,您就可以發送數據。
如果您使用的是http,那麼每次請求後連接都會關閉,除非您使用Comet之類的東西。你可以看一下維基百科,但這篇文章可能是從Java POV有所幫助:如果您使用的是常規的基於套接字的服務器和設置爲具有恆定連接的客戶端 http://www.javaworld.com/javaworld/jw-03-2008/jw-03-asynchhttp-test.html
更新,你可以隨時隨地發送數據,只要連接處於打開狀態即可。它只會被連接的人或網絡問題所關閉。
但是,如果您使用的是http,那麼規則會有所變化,這是第二段的內容。
最簡單的方法是在客戶端/服務器端使用ObjectInputStream/ObjectOutputStream,然後客戶端嘗試從流中讀取數據。如果沒有新的數據,客戶端會等待,並且只要服務器發送一個新數組,客戶端就會讀取它,處理它,然後再次等待。根據客戶端的作用,將讀數放入一個額外的線程可能是明智的,該線程將數組轉換爲實際的處理方法。
使用簡單的socket編程,這是不是在所有問題:
InputStream
和OutputStream
請注意,這種解決方案是不是非常可擴展,如果這需要縮放,你會nee d使用非阻塞IO(以便您的服務器不會阻塞所有打開的連接和正在運行的線程)
hmmm ... HTTP的默認行爲是「連接關閉」:這是一個瀏覽器行爲。 – jldupont 2009-10-26 19:52:55
每個請求都是一個telnet連接,並且當我收到其他請求時,它似乎被web服務器關閉,這是我的理解。 – 2009-10-26 19:54:07
但是從這個問題來看,它沒有明確說明我們正在處理瀏覽器/ Web服務器對,是嗎? – jldupont 2009-10-26 19:56:32