热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何快速搭建一个Netty服务

如何快速搭建一个Netty服务

netty旨在为可维护的高性能、高可扩展性协议服务器和客户端的快速开发提供异步事件驱动的网络应用程序框架和工具。换句话说,Netty是一个NIO客户端服务器框架,可以快速轻松地开发协议服务器和客户端等网络应用程序。它极大地简化并简化了TCP和UDP套接字服务器开发等网络编程。

第一步 引用
如何快速搭建一个Netty服务
第二步 编写服务端代码

1 编写服务端启动方法:
如何快速搭建一个Netty服务
(1) 因为我在这里使用了Netty提供的分隔符解码器,Netty本身提供的分隔符解码器对于结尾是 /n 以及 /r/n 提供支持 但是我定义的msg中可能会有/n字符 所以自定义了用于区分结尾的 $_ 字符作为分隔符。
注意 : 使用了自定义分隔符的时候msg一定要以分隔符结尾 ,否则Netty 会继续等待写入,而不会及时发送。
// 请不要在意msg被我定义了 10240 KB

(2) Netty自带的心跳机制 空闲时间在达到一定时间后(时间由参数定义)会触发userEventTriggered 事件 事件,事件我会在 MyChatServerHandler 类中重写 具体逻辑代码需要和业务逻辑看齐。

2 构建MyChatServerHandler
2.1 Netty自带的事件几乎都在 SimpleChannelInboundHandler 这个类中所以需要构建MyChatServerHandler 类 重写其中的方法
如何快速搭建一个Netty服务
(1) 这里定义的是连接线程组 所有连接到服务端的线程都会在这个线程组中存在,当某一个连接断开的同时线程组中代表这一断开连接的数据会被移除。
(2) Channel 这个类代表了当前接收到的msg是有哪一个IP的哪一个线程发送的 类中 channel.id() 会获取到唯一的一个id 但是一般也用不上,因为它本身就是唯一的。

到这里 一个简单的服务端就搭建好了 实现了类似多人聊天的功能 接收到的消息同步推送给所有连接中的客户端,并且区分了客户端自己发送的消息 还是由其他客户端发送的消息,类中还有一些实用的方法,我会截图放在下方,如果不需要的话可以直接跳过方法,直接搭建客户端了
如何快速搭建一个Netty服务
如何快速搭建一个Netty服务

如何快速搭建一个Netty服务
如何快速搭建一个Netty服务

如何快速搭建一个Netty服务
这个方法会被心跳机制触发,我这里是做了关闭连接的操作 你也可以发送消息给客户端 或者将这个方法写在客户端 主动发送特殊msg ,当服务端没有发送特定msg给客户端时认为断开连接 尝试重新连接

第三步 编写客户端代码
1 编写客户端启动代码
如何快速搭建一个Netty服务

启动引导与服务端几乎一样,这里我就跳过了
(1) 这里我注册了监听用于实现客户端断开或连接失败时的重新连接
(2) 该方法为了实现 客户端断开或连接失败时的重新连接提供服务

2 构建MyChatClientHandler
如何快速搭建一个Netty服务
(1) 我将ChannelHandlerContext myCtx 定义为一个静态常量 在channelActive 方法中赋值,这样的话我就能在模块中的任意地方 调用 myCtx.channel().writeAndFlush(“msg”); 发送msg给服务端发送消息,要知道Netty几乎一切的一切都可以再 ChannelHandlerContext 中获取到,只要能获取到这个类 我就是无敌的 同样的为了保证这个类不为空 我这建立连接的第一时间向服务端发送了一个msg。

到这里一个简单的Netty就搭建好了,同时我们实现了一个简单的多人聊天室的功能, 而且这也是我的第一篇博客 可喜可贺可喜可贺 。

byebye !!!


推荐阅读
  • 本文分享了一位Android开发者多年来对于Android开发所需掌握的技能的笔记,包括架构师基础、高级UI开源框架、Android Framework开发、性能优化、音视频精编源码解析、Flutter学习进阶、微信小程序开发以及百大框架源码解读等方面的知识。文章强调了技术栈和布局的重要性,鼓励开发者做好学习规划和技术布局,以提升自己的竞争力和市场价值。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • Voicewo在线语音识别转换jQuery插件的特点和示例
    本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了Python爬虫技术基础篇面向对象高级编程(中)中的多重继承概念。通过继承,子类可以扩展父类的功能。文章以动物类层次的设计为例,讨论了按照不同分类方式设计类层次的复杂性和多重继承的优势。最后给出了哺乳动物和鸟类的设计示例,以及能跑、能飞、宠物类和非宠物类的增加对类数量的影响。 ... [详细]
  • 吃透Netty源码系列四之NioEventLoop
    吃透Netty源码系列四之NioEventLoop新启动的线程的作用执行NioEventLoop的run方法执行任务一(通道注册register0)doRegisterpipeli ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 1、概述首先和大家一起回顾一下Java消息服务,在我之前的博客《Java消息队列-JMS概述》中,我为大家分析了:然后在另一篇博客《Java消息队列-ActiveMq实战》中 ... [详细]
author-avatar
手机用户2502863297
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有