Springboot2整合netty4.0
阿新 • • 發佈:2018-11-16
Springboot2整合netty4.0
前端:
window.CHAT = { socket: null, init: function() { if (window.WebSocket) { CHAT.socket = new WebSocket("ws://192.168.1.10:8088/ws"); CHAT.socket.onopen = function() { console.log("連線建立成功..."); }, CHAT.socket.onclose = function() { console.log("連線關閉..."); }, CHAT.socket.onerror = function() { console.log("發生錯誤..."); }, CHAT.socket.onmessage = function(e) { console.log("接受到訊息:" + e.data); var receiveMsg = document.getElementById("receiveMsg"); var html = receiveMsg.innerHTML; receiveMsg.innerHTML = html + "<br/>" + e.data; } } else { alert("瀏覽器不支援websocket協議..."); } }, chat: function() { var msg = document.getElementById("msgContent"); CHAT.socket.send(msg.value); } }; CHAT.init();
後端:整合netty server
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
// websocket 基於http協議,所以要有http編解碼器 pipeline.addLast(new HttpServerCodec()); // 對寫大資料流的支援 pipeline.addLast(new ChunkedWriteHandler()); // 對httpMessage進行聚合,聚合成FullHttpRequest或FullHttpResponse // 幾乎在netty中的程式設計,都會使用到此hanler pipeline.addLast(new HttpObjectAggregator(1024*64)); // ====================== 以上是用於支援http協議 ====================== // ====================== 增加心跳支援 start ====================== // 針對客戶端,如果在1分鐘時沒有向服務端傳送讀寫心跳(ALL),則主動斷開 // 如果是讀空閒或者寫空閒,不處理 pipeline.addLast(new IdleStateHandler(8, 10, 12)); // 自定義的空閒狀態檢測 pipeline.addLast(new HeartBeatHandler()); // ====================== 增加心跳支援 end ====================== // ====================== 以下是支援httpWebsocket ====================== /** * websocket 伺服器處理的協議,用於指定給客戶端連線訪問的路由 : /ws * 本handler會幫你處理一些繁重的複雜的事 * 會幫你處理握手動作: handshaking(close, ping, pong) ping + pong = 心跳 * 對於websocket來講,都是以frames進行傳輸的,不同的資料型別對應的frames也不同 */ pipeline.addLast(new WebSocketServerProtocolHandler("/ws")); // 自定義的handler pipeline.addLast(new ChatHandler()); }
原始碼下載:http://47.98.237.162/detail/1/181
下載原始碼後,記住分享喲!
第一步:微信關注公眾號豔學網!
第二步:關注後開啟選單“豔輝福利”——“java福利”,轉發文章至朋友圈。
長按自動識別二維碼,即可關注微信公眾號“豔學網”