返回顶部
首页 > 资讯 > 精选 >Netty学习教程之基础使用篇
  • 787
分享到

Netty学习教程之基础使用篇

netty基础 2023-05-31 14:05:12 787人浏览 薄情痞子
摘要

什么Netty?Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端编程框架

什么Netty?

Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。

也就是说,Netty 是一个基于NIO的客户、服务器编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用。Netty相当简化和流线化了网络应用的编程开发过程,例如,tcp和UDP的Socket服务开发。

我们下面编写四个类

      1.用于接收数据的服务器端Socket

      2.用于接收客户端的消息,用于接收和反馈客户端发出的消息类ServertHandler

      3.用于发送数据的服务器端Client

      4.用于发送数据和接收服务器端发出的数据处理类ClientHandler

Socket.java

import io.netty.bootstrap.ServerBootstrap; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelInitializer; import io.netty.channel.ChannelOption; import io.netty.channel.EventLoopGroup; import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.channel.socket.nio.NiOServerSocketChannel; import io.netty.handler.codec.DelimiterBasedFrameDecoder; import io.netty.handler.codec.string.StringDecoder;  public class Server {    public static void main(String[] args) throws InterruptedException {   //1.第一个线程组是用于接收Client端连接的   EventLoopGroup bossGroup = new NioEventLoopGroup();   //2.第二个线程组是用于实际的业务处理的   EventLoopGroup workerGroup = new NioEventLoopGroup();   ServerBootstrap b = new ServerBootstrap();   b.group(bossGroup, workerGroup);//绑定两个线程池   b.channel(NioServerSocketChannel.class);//指定NIO的模式,如果是客户端就是NioSocketChannel   b.option(ChannelOption.SO_BACKLOG, 1024);//TCP的缓冲区设置   b.option(ChannelOption.SO_SNDBUF, 32*1024);//设置发送缓冲的大小   b.option(ChannelOption.SO_RCVBUF, 32*1024);//设置接收缓冲区大小   b.option(ChannelOption.SO_KEEPALIVE, true);//保持连续   b.childHandler(new ChannelInitializer<SocketChannel>() {    @Override    protected void initChannel(SocketChannel sc) throws Exception {     ByteBuf buf = Unpooled.copiedBuffer("$_".getBytes());//拆包粘包定义结束字符串(第一种解决方案)     sc.pipeline().addLast(new DelimiterBasedFrameDecoder(1024,buf));//在管道中加入结束字符串    // sc.pipeline().addLast(new FixedLengthFrameDecoder(200));第二种定长     sc.pipeline().addLast(new StringDecoder());//定义接收类型为字符串把ByteBuf转成String     sc.pipeline().addLast(new ServertHandler());//在这里配置具体数据接收方法的处理    }   });   ChannelFuture future = b.bind(8765).sync();//绑定端口   future.channel().closeFuture().sync();//等待关闭(程序阻塞在这里等待客户端请求)   bossGroup.shutdownGracefully();//关闭线程   workerGroup.shutdownGracefully();//关闭线程  } } 

--结束END--

本文标题: Netty学习教程之基础使用篇

本文链接: https://lsjlt.com/news/226186.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Netty学习教程之基础使用篇
    什么Netty?Netty是由JBOSS提供的一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。也就是说,Netty 是一个基于NIO的客户、服务器端编程框架...
    99+
    2023-05-31
    netty 基础
  • CTF之PHP基础学习篇(一)
    文章目录 前言CTF之PHP基础一、PHP是什么?二、配置PHP环境三、php基础语法 总结 前言 估摸着不少学计算机的同学以及其他专业的小部分同学都对于信息安全感兴趣吧!那对于参加...
    99+
    2023-10-02
    php 网络安全 学习
  • Tornado基础学习篇
    1.1 Tornado是什么? Tornado是使用Python编写的一个强大的、可扩展的Web服务器。它在处理严峻的网络流量时表现得足够强健,但却在创建和编写时有着足够的轻量级,并能够被用在大量的应用和工具中。 我们现在所知道的Tor...
    99+
    2023-01-30
    基础 Tornado
  • socket.io学习教程之基础介绍(一)
    前言 Web端与服务器间的实时数据传输的是一个很重要的需求,但最早只能通过AJAX轮询询实现。在WebSocket标准没有推出之前,AJAX轮询是唯一可行的方式(通过Flash浏览器也可以,但这里不做讨论...
    99+
    2022-06-04
    基础 教程 socket
  • Python学习基础篇(一)
    Python简介和入门Python简介走进Pythonpython的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一...
    99+
    2023-01-31
    基础 Python
  • socket.io学习教程之深入学习篇(三)
    前言 socket.io提供了基于事件的实时双向通讯,本文深入的介绍了socket.io,下面来看看详细的内容吧。 静态文件 socket.io默认情况下会通过socket.io-client包提供soc...
    99+
    2022-06-04
    教程 socket io
  • vuex学习进阶篇之getters的使用教程
    目录1.设置gettes 事件2.使用调用3.最终页面示例getters的优点:总结紧接上篇,本片主要讲讲vuex 中 getters的使用,示例中使用了vuex的modules,g...
    99+
    2022-11-13
    vuex getters使用 vuex状态管理getters
  • Netty学习教程之Netty与Marshalling结合发送对象
    前言之前的一篇文章是Netty简单的学习,我们可以传递一个字符串,那么如果我们想要在Netty中传递一个对象该怎么办呢 ?那么这个时候我们可以结合Marshalling来传递。方法如下:首先需要导入两个Marshalling的依赖包jbos...
    99+
    2023-05-31
    netty marshalling 发送对象
  • Python基础学习教程:Python基础之基本数据类型(一)
    Python基础学习教程:Python基础之基本数据类型(一)...
    99+
    2023-06-02
  • 学习手册--Linux基础篇
    目录1. linux系统介绍1.1 linux的概述1.2 linux的优势1.3 linux的分类1.4 常见的发行版linux系统2. Linux的安装3. Linux的基础篇3.1 目录结构3.1.1 那具体有哪些...
    99+
    2022-06-04
    Linux学习 Linux基础
  • Kotlin基础学习-入门篇
    本篇文章来自郭霖大佬的第一行代码中的Kotlin教程,笔者只是在学习Kotlin过程中记录学习过程。 Kotlin系列已更新: Kotlin基础学习-入门篇 Kotlin基础学习-第二篇 Kotli...
    99+
    2023-09-07
    kotlin android
  • [Python]学习基础篇:字典
    字典字典这个数据结构的功能和它的名字一样,根据key得到value值。字典的定义 方法: dict={‘key1’:value1,’key2’:value2……..} 对于字典,key值在字典中不能重复,若出现重复,将更改原有的key对应的...
    99+
    2023-01-31
    字典 基础 Python
  • Python常用算法学习基础教程
    本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制...
    99+
    2022-06-04
    算法 基础教程 常用
  • kotlin 官方学习教程之基础语法详解
    kotlin 官方学习教程之基础语法详解Google 在今天的举行了 I/O 大会,大会主要主要展示内有容 Android O(Android 8.0)系统、Google Assistant 语音助手、Google 智能音箱、人工智能、机器...
    99+
    2023-05-31
    kotlin 教程
  • R语言学习-基础篇1
    ###第一周:R基础 rm(list = ls())  #ctr+L###矩阵相乘,函数diag()a=matrix(1:12,nrow=3,ncol=4)b=matrix(1:12,nrow=4,ncol=3)a%*%ba=matrix(...
    99+
    2019-01-18
    R语言学习-基础篇1
  • Python学习入门基础教程(learn
     在Python里可以自定义函数,实现某特定功能,这里首先要区分一下函数的定义和函数的调用两个基本概念,初学者往往容易混淆。      函数的定义是指将一堆能实现特定功能的语句用一个函数名标识起来,而函数的调用则是通过函数名来使用这一堆语句...
    99+
    2023-01-31
    基础教程 入门 Python
  • Python学习入门基础教程(lear
      在if分支判断语句里的条件判断语句不一定就是一个表达式,可以是多个(布尔)表达式的组合关系运算,这里如何使用更多的关系表达式构建出一个比较复杂的条件判断呢?这里需要再了解一下逻辑运算的基础知识。逻辑关系运算有以下几种运算符.     ...
    99+
    2023-01-31
    基础教程 入门 Python
  • Java学习教程:Java基础——反射
    什么是反射?JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。例如:我们在开发的过程当中,...
    99+
    2023-06-03
  • shell学习之编程基础知识
    有学过编程语言的同学们都能够很快入手shell因为基础的字符类型,循环语句与C语言也差不多。以下我们来了解以下新手基础:1.在学习循环语句之前先了解一些基础的字符信息:$0、$1、$2、$、$*、$#$0 ...
    99+
    2024-04-02
  • Python基础学习之认识线程
    目录一、什么是线程?二、再来解释线程的代码三、线程触发业务函数,线程调用业务函数四、多了一个线程是哪个?五、总结一、什么是线程? 我们知道工人都是同时在工厂工作,复制各自的工作的。他...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作