簡體   English   中英

Java中的流數據:RMI與套接字

[英]Streaming data in Java: RMI vs Socket

我有一台服務器,需要以Observer模式盡快將數據流式傳輸到多個客戶端。

每秒至少需要向每個客戶端發送200條消息,直到客戶端與服務器斷開連接為止,並且每條消息都包含8種幾種原始類型的值。 因為每條消息都需要在創建后立即發送,所以消息無法合並為一條大消息。 服務器和客戶端都位於同一局域網中。

在這種情況下,RMI或套接字哪種技術更適合實現流傳輸?

RMI的開銷很大,因此不合適。 創建一個簡單的協議並使用套接字發送數據會更好。

根據可接受的等待時間,您應該配置套接字緩沖區大小並關閉Nagle算法。

我不會為此使用RMI,RMI只是用於遠程方法調用,即當客戶端想要在服務器端執行方法(即某些業務邏輯)時。

套接字可以解決此問題,但是您可能需要針對這種特定情況考慮使用JMS(Java消息服務)。 JMS支持一種稱為主題的東西,它實質上是對所有對該主題感興趣的偵聽器的廣播 通常也將其優化為非常快。

您可以使用類似Apache ActiveMQ的工具來實現所需的功能。 您還有很多選擇,例如持久性(如果隊列關閉,則消息保留在隊列中),消息到期(如果您希望消息在客戶端不接聽時過時),等等。

您顯然可以使用普通的Sockets來實現所有這些功能,並自己完成所有工作,但是JMS為您提供了所有這些功能。 您可以發送文本或二進制數據,甚至可以發送序列化的對象(我個人不建議后者)。

RMI是請求/響應協議,而不是流協議。 使用TCP。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM