2016-02-27 202 views
1

我正在考慮在我的項目中使用Socket.IO通過WebSocket(我目前使用)。我還沒有使用過Node.js。當我試圖通過Socket.IO時,我意識到Node.js是必須實現的。我有幾個問題要問。使用與Servlet的Socket.IO

  1. 它是類似於目前對WebSocket
  2. 我可以使用Socket.IO沒有Node.js的
  3. 我在哪裏可以學習使用Socket.IO使用Servlet
  4. 我需要單獨的庫文件添加到在Servlet中使用Socket.IO(我正在使用Java 8)。如果是的話,哪一個是正確的。

我正在使用Glass-fish Server。我的項目中只使用了hibernate,沒有使用其他框架,我對其他框架也不熟悉。

我經歷了這個問題以前問here,但我不明白如何使用this。請幫助

回答

5

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/?運輸= websocket

(運輸設置是必需的);

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

您的客戶端和服務器或服務器的配置(不建議禁用它之間,它是有用的爲死的會議)。

  • 支持易於在握手階段寫授權;

  • 支持房間。您可以加入/離開房間(基於Hazelcast/Redisson中的酒吧/小食)並僅爲這些房間發送廣播活動;

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

總之,網狀插槽-IO是非常有用的,穩定的儀器可以在生產中使用。

2)當然。您可以在Java後端使用netty-socket-io。和客戶端上的socket-io庫。甚至純粹的WebSocket:

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)遺憾的是,有關於網狀插槽-io的信息很少,當你陷入困境時,你可以嘗試它並創造新的問題;

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