栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Netty案例 手动实现Nginx和聊天室支持单聊和群聊,心跳检测,强制下线

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Netty案例 手动实现Nginx和聊天室支持单聊和群聊,心跳检测,强制下线

手动实现一个Nginx加聊天室的案例

闲来无事?快来拿个小案例练手

简单易懂快速上手
案例不长快快 上车!
上车 GO! GO! GO! 

相信通过这个案例能让你学到更多东西

关注收藏是我最大动力

文章目录
  • 服务器开发
    • 环境准备
    • 代码编写
      • 服务器后端代码
      • 聊天室前端代码
      • 聊天室后端代码
  • 效果测试

代码全部粘贴下面了,如果想要一个完整的包可以私信我,我也会把打包的链接留在后面

来介绍一下这个小案例:

1.服务器

  • 实现一个资源通过http映射类似Nginx
    我们的案例都在我们自己实现的服务器上面运行,没有使用Tomcat Nginx Spring等第三方

2.聊天业务

  • 实现单聊
  • 实现群聊
  • 房间人数实时检查
  • 实现离线消息
  • 实现账号冲突强制下线
  • 实现心跳在线检测


案例简介
Netty是Java的一个通信框架,是基于NIO来实现的,有许多的java中间件都是Netty来开发的,Netty的高性能是大家有目共睹,大家都认可的

本案例都是通过Netty来编写的,如果有netty基础可能更好理解一些,如果没有不要慌,如有需要私信我,马上更新Netty基础

这个案例分为两个阶段:

  • 服务器开发
  • 聊天室开发

话不多说开始编写代码


服务器开发 环境准备

先导入pom的配置

Netty的包,复制下来放到pom文件里就行了

 
            io.netty
            netty-all
            4.1.75.Final
        

环境准备就这么多,没错就这么多!都手写的还要这么多框架干嘛


代码编写 服务器后端代码

给大家简单介绍一下原理,非常简单

是通过Netty实现Http协议,然后根据浏览器发来需要的文件地址,我们通过IO流把文件字节码读取出来,然后再通过Http协议发送到浏览器

下面是详细介绍,最后有完整代码


先写一个想要映射的文件夹的路径

我想要映射这个文件夹

创建Netty的启动类,并绑定端口


handler处理器操作http并进行io操作把数据返回给浏览器

这样我们的服务器后端代码就结束了

来测试
在浏览器里输入我们的地址 localhost:8081

回车

OHHHHHHHHHHHHHHHHHH!

OHHHHHHHHHHHHHHHHHH!

我们的页面加载出来了,我写的路径为 / 默认加载index.html

服务器后端的全部代码,简短精悍

    public static void main(String[] args) {

        String baseUrl="C:\Users\Alie\Desktop\demo";
        //初始化Netty
        new ServerBootstrap()
                .group(new NioEventLoopGroup())
                .channel(NioServerSocketChannel.class)
                .childHandler(new ChannelInitializer() {
                    @Override
                    protected void initChannel(NioSocketChannel nioSocketChannel) throws Exception {
                        //对http进行解码操作
                        nioSocketChannel.pipeline().addLast(new HttpServerCodec());
                        //对管道添加处理器指定类型为http
                        nioSocketChannel.pipeline().addLast(new SimpleChannelInboundHandler() {
                            @Override
                            protected void channelRead0(ChannelHandlerContext channelHandlerContext, HttpRequest httpRequest) throws Exception {
                                System.out.println(httpRequest.uri());
                                //获取请求的url
                                String url=httpRequest.uri();
                                //如果url为/则自动映射index.html文件
                                url=url.equals("/")?"/index.html":url;
                                //添加响应状态码200
                                DefaultFullHttpResponse defaultHttpResponse=new DefaultFullHttpResponse(httpRequest.protocolVersion(), HttpResponseStatus.OK);
                                //创建输入流从文件夹里去读取文件
                                FileInputStream fileInputStream=new FileInputStream(new File(baseUrl+url));
                                //字节数组暂存文件
                                byte[] bytes=new byte[1024];
                                int len=0;
                                //io操作将数据写回浏览器
                                while (-1!=(len=fileInputStream.read(bytes))) {

                                    defaultHttpResponse.content().writeBytes(bytes,0,len);
                                }
                                //关闭资源
                                fileInputStream.close();
                                channelHandlerContext.writeAndFlush(defaultHttpResponse);
                                channelHandlerContext.close();
                            }
                        });
                    }
                    //绑定端口
                }).bind(8081);

    }

聊天室前端代码

由于前端代码比较简单就直接给大家,直接用就好了





	
	图片提示