Netty1

netty server



package com.chigo.it.netty.heartbeat;

import io.netty.bootstrap.ServerBootstrap;

import io.netty.channel.ChannelFuture;

import io.netty.channel.ChannelFutureListener;

import io.netty.channel.ChannelInitializer;

import io.netty.channel.ChannelOption;

import io.netty.channel.nio.NioEventLoopGroup;

import io.netty.channel.socket.SocketChannel;

import io.netty.channel.socket.nio.NioServerSocketChannel;

import io.netty.channel.socket.nio.NioSocketChannel;

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.logging.LogLevel;

import io.netty.handler.logging.LoggingHandler;

import io.netty.handler.stream.ChunkedWriteHandler;

/**

* @description:

* @date: 2020/5/30

* @version: 1.0

*/

public class WebSocketNetty {

public static void main(String[] args) {

NioEventLoopGroup bossGroup =new NioEventLoopGroup();

NioEventLoopGroup workGroup =new NioEventLoopGroup();

try {

ServerBootstrap serverBootstrap =new ServerBootstrap()

.group(bossGroup,workGroup)

.channel(NioServerSocketChannel.class)

/*.option(ChannelOption.SO_BACKLOG, 128)

.childOption(ChannelOption.SO_KEEPALIVE, true)*/

                    .handler(new LoggingHandler(LogLevel.INFO))

.childHandler(new ChannelInitializer() {

@Override

                        protected void initChannel(SocketChannel socketChannel)throws Exception {

//websocket base on http protocol

                            socketChannel.pipeline().addLast(new HttpServerCodec());

//websocket request big data should chunkedwriter,mutil request

                            socketChannel.pipeline().addLast(new ChunkedWriteHandler());

//chunkedwriter so receice mutil data should aggration

                            socketChannel.pipeline().addLast(new HttpObjectAggregator(8192));

//websocket base on frame transaface, websocketserverprotocolhandler can http protocol to websocket protocol

//request path: ws://localhost:9999/hello

                            socketChannel.pipeline().addLast(new WebSocketServerProtocolHandler("/demo"));

socketChannel.pipeline().addLast(new WebSocketHandler());

}

});

ChannelFuture channelFuture =serverBootstrap.bind(9999).sync();

/*channelFuture.addListener(new ChannelFutureListener() {

@Override

public void operationComplete(ChannelFuture channelFuture) throws Exception {

if (channelFuture.isSuccess()) {

System.out.println("server is listener seccess");

}else {

System.out.println("server is listener faile");

}

}

});*/

            channelFuture.channel().closeFuture().sync();

}catch (InterruptedException e){

}finally {

bossGroup.shutdownGracefully();

workGroup.shutdownGracefully();

}

}

}



handler

package com.chigo.it.netty.heartbeat;

import io.netty.channel.ChannelHandlerContext;

import io.netty.channel.SimpleChannelInboundHandler;

import io.netty.handler.codec.http.DefaultHttpRequest;

import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;

import java.time.LocalDateTime;

/**

* @description:

* @version: 1.0

*/

public class WebSocketHandler extends SimpleChannelInboundHandler {

@Override

    protected void channelRead0(ChannelHandlerContext ctx,TextWebSocketFrame msg)throws Exception {

System.out.println("服务器收到的信息:" + msg.text());

ctx.writeAndFlush(new TextWebSocketFrame("服务器的时间是: "+LocalDateTime.now()+" "+msg.text()));

}

@Override

    public void handlerAdded(ChannelHandlerContext ctx)throws Exception {

System.out.println("handlerAdded 被调用了" + ctx.channel().id().asLongText());

System.out.println("handlerAdded 被调用了" + ctx.channel().id().asShortText());

}

@Override

    public void handlerRemoved(ChannelHandlerContext ctx)throws Exception {

System.out.println("handlerRemoved 被调用了" + ctx.channel().id().asShortText());

}

@Override

    public void exceptionCaught(ChannelHandlerContext ctx,Throwable cause)throws Exception {

cause.printStackTrace();

ctx.close();

}

}



html


Title

var socket;

//判断当前浏览器是否支websocket

    if (window.WebSocket) {

socket =new WebSocket("ws://localhost:7000/demo");

//相当于chnnelReadO,ev收到服务器端回送的消息

        socket.onmessage =function (ev) {

var rt =document.getElementById("responseText");

rt.value =rt.value +"\n" + ev.data;

}

//相当于连接开启了

        socket.onopen =function (ev) {

var rt =document.getElementById("responseText");

rt.value ="连接开启了..";

}

//相当于连接关闭了,感知到连接关闭

        socket.onclose =function (ev) {

var rt =document.getElementById("responseText");

rt.value =rt.value +"\n" +"连接关闭了";

}

}else {

alert("当前浏览器不支持websocket")

}

function send(message) {

//判断socket是否创建好

        if (!window.socket) {

return;

}

if (socket.readyState ===WebSocket.OPEN) {

socket.send(message);

}else {

alert("连接没有开启");

}

}




Title

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。