簡體   English   中英

在Servlet中使用Socket.IO

[英]Use Socket.IO with Servlet

我正在考慮在我的項目中通過WebSocket(當前正在使用)使用Socket.IO。 我還沒有使用過Node.js。 當我嘗試瀏覽Socket.IO時,我想到了Node.js是實現它的必要條件。 我有幾個問題要問。

  1. 它類似於WebSocket
  2. 我可以在沒有Node.js的情況下使用Socket.IO嗎
  3. 在哪里可以學習在Servlet中使用Socket.IO
  4. 我是否需要添加單獨的庫文件才能在Servlets中使用Socket.IO(我正在使用Java 8)。 如果是,那是正確的。

我正在使用Glass-fish服務器。 我的項目中僅使用了休眠模式,沒有使用其他框架,而且我對其他任何框架都不熟悉。

我通過這個問題以前問走到這里 ,但我不知道如何使用這個 請幫忙

1)是的。 它類似於純websocket。 但是netty-socketio:

哪里

  • 4-消息的包類型;
  • 2-事件的內部類型;
  • eventName-事件的名稱,它在Java @OnEvent處理程序中必須相同(請參見下文)。

您可以根據需要組織your_data_objects,例如,編寫類似HTTP的內容:

42["eventName", {headers map}, data(primitive, array or object)]

42["createUser", {"requestId": "UUID"}, {
    "firstName": "John",
    "lastName": "Dow"
}]

42["deleteUser", {}, 10]

42["getUsers", {}, [1,2,3,4,5]]

等等。

  • 需要通過http連接到

    ws://host/socket.io/?transport = websocket

(需要設置傳輸);

  • 需要發送乒乓包
  • 2-PING,
  • 3-傍

在客戶端和服務器之間切換或在服務器的配置中禁用它(不建議這樣做,對於死會話很有用)。

  • 支持在握手階段輕松編寫授權;

  • 支持房間。 您可以加入/離開會議室(基於Hazelcast / Redisson中的pub / sub),並僅發送這些會議室的廣播事件。

  • 支持確認回調(可以禁用);

總之,netty-socket-io是非常有用的,穩定的儀器,可以用於生產中。

2)絕對。 您可以在Java后端使用netty-socket-io。 客戶端上的socket-io庫。 甚至是純網絡套接字:

var ws = new Websocket("ws://localhost:9060/socket.io/?transport=websocket");

setInterval(function(){ sendHeartbeat(); }, 5000);

function sendHeartbeat() {
    ws.send("2");
}

ws.onopen = function() {
    ws.send('42["doSomething", {"header1": "value1"}, {"key1": "value1"}');
}

Java:

public class Controller {

    @OnEvent("doSomething")
    public void doSomething(SocketIOClient client, Headers headers, Something something) {
        client.sendEvent("doSomethingSuccess", null, responseHeaders, responseObject);
    }
}

並在配置中路由到控制器:

server.addListeners(new Controller()); 

3)可悲的是,關於netty-socket-io的信息很少,遇到麻煩時您可以嘗試並創建新問題;

4)您需要將netty-socket-io添加到您的依賴項中。 Hazelcast或Redisson(如果要使用它們來存儲會話和房間訂閱)。 Jackson用於json序列化/反序列化。 就這樣。

暫無
暫無

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

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