图灵课堂netty 仿微信开发

通信的图文示例

 

 以下是需要实现的前端界面,

 准备工作:开始实现前需要技术关健字解释

第一步,这儿直接建一个maven 项目 就好,只要是可能用maven 管理包的环境就行,课程使用的版本是 java 17

 新建工程包。

 导入依赖包,。最新的netty 

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-all</artifactId>
    <version>4.1.85.Final</version>
</dependency>

  编后编写一个启动类,用于启动程序,在编写一个具体的业务,在启动类调用

编写启动类,取名:TuringMApplication  代码 如下

package turing.im;

public class TuringMApplication {
    public static void main(String[] args) {
        IMServer.start();
    }
}

  编写一个业务的类,在启动类调用 类名:IMServer

package turing.im;

public class IMServer {
    public static void start() {
    }
}

 然后在IMServer 类中编写代码,保证代码运行起来。

package turing.im;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel; // 这里导入的是Netty的SocketChannel
import io.netty.channel.socket.nio.NioServerSocketChannel;

public class IMServer {
    public static void start() {
        EventLoopGroup bossGroup = new NioEventLoopGroup(1); // 通常bossGroup的数量设置为1
        EventLoopGroup workerGroup = new NioEventLoopGroup(); // workerGroup可以根据需要设置为多线程

        ServerBootstrap bootstrap = new ServerBootstrap();
        bootstrap.group(bossGroup, workerGroup)
                .channel(NioServerSocketChannel.class)
                .childHandler(new ChannelInitializer<SocketChannel>() { 
                    @Override
                    protected void initChannel(SocketChannel ch) throws Exception {
                       
                    }
                });
     
    }

}

 

  

 启动成功后可以输入  netstat -ano | findstr '8080'   查看也启动端口 

接下来我们添加几个处理器,这些处我会红色标一下,需要说明的是这些处理器系统要用的,比如大文件,文件编吗之类,我们自己

的业务需要自己定义

package turing.im;

import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel; // 这里导入的是Netty的SocketChannel
import io.netty.channel.socket.nio.NioServerSocketChannel;
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 IMServer {
    public static void start() throws InterruptedException {
        EventLoopGroup bossGroup = new NioEventLoopGroup(1); // 通常bossGroup的数量设置为1
        EventLoopGroup workerGroup = new NioEventLoopGroup(); // workerGroup可以根据需要设置为多线程

        ServerBootstrap bootstrap = new ServerBootstrap();
        bootstrap.group(bossGroup, workerGroup)
                .channel(NioServerSocketChannel.class)
                .childHandler(new ChannelInitializer<SocketChannel>() { // 这里的SocketChannel应该是Netty的SocketChannel
                    @Override
                    protected void initChannel(SocketChannel ch) throws Exception {
                        // 在这里添加初始化Channel的逻辑
                        ChannelPipeline pipeline = ch.pipeline();
                        // 添加Http编解码器,还有有些是其它自带还需要的处理管道
                        pipeline.addLast(new HttpServerCodec())
                         .addLast(new ChunkedWriteHandler())
                                 .addLast(new HttpObjectAggregator(2024*64))
                                 .addLast(new WebSocketServerProtocolHandler("/"))
//                                以下是我们的自己的业务
                                 .addLast(new WebSockeHandler());

                    }
                });
                        bootstrap.bind(8080).sync();
    }
}

然后在我们自己的类测试一下能不能输出文本,请注意参数部份。

package turing.im;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.SimpleChannelInboundHandler;
import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;

public class WebSockeHandler extends SimpleChannelInboundHandler<TextWebSocketFrame> {

    @Override
    protected void channelRead0(ChannelHandlerContext channelHandlerContext, TextWebSocketFrame tFrame) throws Exception {
       System.out.println(tFrame.text());
    }
}

  

 现在可以运行测试,在线测试代码的地址: http://websocket-test.com/

 运行成功后,编辑器和websoket 发送工具都 有我们发送的数据,如下图

 

posted @ 2024-06-19 08:06  谢双元小号  阅读(59)  评论(0)    收藏  举报