[英]Use Socket.IO with Servlet
我正在考慮在我的項目中通過WebSocket(當前正在使用)使用Socket.IO。 我還沒有使用過Node.js。 當我嘗試瀏覽Socket.IO時,我想到了Node.js是實現它的必要條件。 我有幾個問題要問。
我正在使用Glass-fish服務器。 我的項目中僅使用了休眠模式,沒有使用其他框架,而且我對其他任何框架都不熟悉。
1)是的。 它類似於純websocket。 但是netty-socketio:
使用socket-io協議;
支持內存/ Hazelcast / Redisson存儲,用於開箱即用地存儲會話;
基於事件模型。 您必須將數據發送到套接字
42 [“ eventName”,your_data_objects]
哪里
@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
(需要設置傳輸);
在客戶端和服務器之間切換或在服務器的配置中禁用它(不建議這樣做,對於死會話很有用)。
支持在握手階段輕松編寫授權;
支持房間。 您可以加入/離開會議室(基於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.