[英]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.