websocket.server.RandomResponseGenerator.java
在西疇等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站制作、成都做網(wǎng)站、外貿(mào)營(yíng)銷網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),營(yíng)銷型網(wǎng)站建設(shè),外貿(mào)網(wǎng)站制作,西疇網(wǎng)站建設(shè)費(fèi)用合理。
package websocket.server; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; import java.util.Random; import org.apache.log4j.Logger; public class RandomResponseGenerator extends Thread{ private ChannelHandlerContext ctx; private Random random = new Random(); private int messageCount = 10; public RandomResponseGenerator(ChannelHandlerContext ctx){ this.ctx=ctx; } private Logger logger = Logger.getLogger(RandomResponseGenerator.class); public void run() { while(messageCount-->0){ ctx.writeAndFlush(new TextWebSocketFrame("[server] the random value is : "+random.nextInt(20))); try { Thread.sleep(1000); } catch (InterruptedException e) { logger.error("encounter an exception",e); } } } }
websocket.server.HttpRequestHandler.java
package websocket.server; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.handler.codec.http.FullHttpRequest; import org.apache.log4j.Logger; public class HttpRequestHandler extends SimpleChannelInboundHandler<FullHttpRequest> { private final String wsUri; public HttpRequestHandler(String wsUri) { this.wsUri = wsUri; } private Logger logger = Logger.getLogger(HttpRequestHandler.class); @Override protected void channelRead0(final ChannelHandlerContext ctx, FullHttpRequest msg) throws Exception { if(wsUri.equalsIgnoreCase(msg.getUri())){ logger.info("a websocket connection established ... "); logger.info("the request uri is : "+msg.getUri()); new RandomResponseGenerator(ctx).start(); ctx.fireChannelRead(msg.retain()); } } }
websocket.server.TextWebSocketFrameHandler.java
package websocket.server; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; import org.apache.log4j.Logger; public class TextWebSocketFrameHandler extends SimpleChannelInboundHandler<TextWebSocketFrame> { private Logger logger = Logger.getLogger(TextWebSocketFrameHandler.class); @Override protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) throws Exception { String message = msg.content().toString(io.netty.util.CharsetUtil.UTF_8); logger.info("receive below information from client:\n"+message); ctx.writeAndFlush(new TextWebSocketFrame("[server] receive message ["+message+"] successfully")); } }
websocket.server.WebSocketServerInitializer.java
package websocket.server; import io.netty.channel.Channel; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelPipeline; import io.netty.handler.codec.http.HttpObjectAggregator; import io.netty.handler.codec.http.HttpServerCodec; import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler; import io.netty.handler.stream.ChunkedWriteHandler; public class WebSocketServerInitializer extends ChannelInitializer<Channel> { @Override protected void initChannel(Channel ch) throws Exception { ChannelPipeline pipeline = ch.pipeline(); pipeline.addLast(new HttpServerCodec()); pipeline.addLast(new ChunkedWriteHandler()); pipeline.addLast(new HttpObjectAggregator(64*1024)); pipeline.addLast(new HttpRequestHandler("/ws")); pipeline.addLast(new WebSocketServerProtocolHandler("/ws")); pipeline.addLast(new TextWebSocketFrameHandler()); } }
pom.xml
<dependencies> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>io.netty</groupId> <artifactId>netty-all</artifactId> <version>4.0.29.Final</version> </dependency> </dependencies>
使用HTML5作為websocket前端實(shí)現(xiàn)
index.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <script type="text/javascript"> var socket; if (!window.WebSocket) { window.WebSocket = window.MozWebSocket; } if (window.WebSocket) { socket = new WebSocket("ws://localhost:8844/ws"); socket.onmessage = function(event) { var ta = document.getElementById('responseText'); ta.value = ta.value + '\n' + event.data }; socket.onopen = function(event) { var ta = document.getElementById('responseText'); ta.value = "連接開(kāi)啟!"; }; socket.onclose = function(event) { var ta = document.getElementById('responseText'); ta.value = ta.value + "連接被關(guān)閉"; }; } else { alert("你的瀏覽器不支持!"); } function send(message) { if (!window.WebSocket) { return; } if (socket.readyState == WebSocket.OPEN) { socket.send(message); } else { alert("連接沒(méi)有開(kāi)啟."); } } </script> <form onsubmit="return false;"> <input type="text" name="message" value="Hello, World!"><input type="button" value="發(fā)送消息" onclick="send(this.form.message.value)"> <h4>輸出:</h4> <textarea id="responseText" ></textarea> <input type="button" onclick="javascript:document.getElementById('responseText').value=''" value="清空"> </form> </body> </html>
當(dāng)前名稱:Netty4之簡(jiǎn)單搭建WebSocket服務(wù)
新聞來(lái)源:http://jinyejixie.com/article4/gpieoe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供云服務(wù)器、虛擬主機(jī)、標(biāo)簽優(yōu)化、商城網(wǎng)站、關(guān)鍵詞優(yōu)化、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)