Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Netty入门学习系列--helloworld服务端(一)

Netty入门学习系列--helloworld服务端(一)

作者头像
用户1257393
发布于 2018-07-30 07:05:20
发布于 2018-07-30 07:05:20
32900
代码可运行
举报
文章被收录于专栏:精讲JAVA精讲JAVA
运行总次数:0
代码可运行

netty服务端

结合上面几篇文章,我们大体了解了netty使用的nio的原理,但是编写一个通信,使用nio过于复杂,对于我们来说,快捷使用nio通信变得尤为重要,于是,我们的主角netty出现了,简化原生nio开发。

public class NettyServerTest {

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static void main(String [] args){
    new NettyServerTest().bing();
}
private void bing(){
    EventLoopGroup bossgroup = new NioEventLoopGroup();
    EventLoopGroup workgroup = new NioEventLoopGroup();
    ServerBootstrap serverBootstrap = new ServerBootstrap();
    serverBootstrap.group(bossgroup,workgroup)
            .channel(NioServerSocketChannel.class)
            .option(ChannelOption.SO_BACKLOG,1024).childHandler(new NettyChildHandle());
    try {
        ChannelFuture cf = serverBootstrap.bind(9999).sync();
        cf.channel().closeFuture().sync();
    } catch (InterruptedException ignored) {
    } finally {
        bossgroup.shutdownGracefully();
        workgroup.shutdownGracefully();
    }
}
private class NettyChildHandle extends ChannelInitializer<socketchannel> {
    @Override
    protected void initChannel(SocketChannel ch) throws Exception {
        ch.pipeline().addLast(new NettyServerHandle());
    }
}}
NettyServerHandle用来处理通信请求,最主要的是实现里面的channelRead、channelReadComplete、exceptionCaught三个方法

public class NettyServerHandle extends ChannelInboundHandlerAdapter {

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
    ByteBuf byteBuf = (ByteBuf) msg;
    byte [] bytes = new byte[byteBuf.readableBytes()];
    byteBuf.readBytes(bytes);
    String body = new String(bytes,"UTF-8");
    System.out.println("收到来自外星的命令"+body);
    String currentTime = "hello".equals(body)?"my name is netty":"No";
    ByteBuf resp = Unpooled.copiedBuffer(currentTime.getBytes());
    ctx.write(resp);
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx) throws Exception {
     ctx.flush();
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {
    ctx.close();
}}
截止目前,netty的服务端编写完成。,下一篇编写客户端,客户端相对来说较为简单
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 精讲JAVA 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Netty 之入门应用
系列文章:http://www.jianshu.com/p/594441fb9c9e
Yano_nankai
2018/10/08
4630
netty
BIO 同步阻塞bio:链接数目较少 public static void main(String args[]) throws IOException { ExecutorService p
Dean0731
2020/10/10
5590
netty
Netty服务端与客户端(源码一)
  (4)创建Selector,将之前创建的ServerSocketChannel注册到Selector上,监听SelectionKeyACCEPT。
用户3003813
2018/09/06
1.7K0
Netty服务端与客户端(源码一)
Netty之入门案例
  前面给大家介绍了NIO,我们会发现用NIO实现异步非阻塞的网络通信代码量非常大,而且并不是很好理解,在实际的开发中一般我们也都是会实现基于NIO的框架来操作的,比如Netty,这样开发效率有高而且Bug也少。
用户4919348
2019/04/18
5460
Netty之入门案例
Netty的TCP粘包/拆包(源码二)
假设客户端分别发送了两个数据包D1和D2给服务器,由于服务器端一次读取到的字节数是不确定的,所以可能发生四种情况:
用户3003813
2018/09/06
9540
Netty的TCP粘包/拆包(源码二)
Netty入门篇
2、Netty简介: netty是一个异步的,基于事件驱动的网络应用框架。可以快速地开发高性能的服务器端和客户端,像dubbo和elasticsearch底层都用了netty。它具有以下优点:
贪挽懒月
2020/07/28
9350
Netty入门篇
Netty01--- Netty实现简单通信
这个Demo的功能是客户端向服务端发送一个Hello Netty的消息,然后服务端又把消息返回给客户端
付威
2020/02/17
4790
编写—个最简单的 Netty 示例
Netty 实现通信的步骤:(客户端与服务器端基本一致) 创建两个的 NIO 线程组,一个专门用于网络事件处理(接受客户端的连接),另一个则进行网络通信读写。 创建—个 ServerBootstrap 对象,配置 Netty 的一系列参数,例如接受传岀数据的缓存大小等等。 创建一个实际处理数据的类 Channellnitializer,进行初始化的准备工作,比如设置接受传出数据的字符集、格式、已经实际处理数据的接口。 绑定端口,执行同步阻塞方法等待服务器端启动即可。 1. 引入依赖 <dependency
灰太狼学Java
2022/06/17
5300
Netty(一)之helloworld
客户端通向服务器端发送消息,服务器端读取数据(你好)并且返回(new Date()),客户端读取数据
CBeann
2023/12/25
1790
【Netty】01-服务端和客户端的搭建
Netty服务端和客户端的搭建 为什么采用Netty,而不采用Nio 使用Netty创建服务器端 使用Netty创建客户端 为什么采用Netty,而不采用Nio Nio原生Api很复杂 Nio存在epoll bug,会产生空轮询,导致cpu被占用100% Netty是基于Nio进行包装,性能上会更高 Netty学习成本和使用成本更低 摘抄自其他文章, Netty的优点总结: 通过对Netty的分析,我们将它的优点总结如下。 ◎ API使用简单,开发门槛低; ◎ 功能强大,预置了多种编解码功能,支
envoke
2020/09/17
1.1K0
Netty(1):第一个netty程序
为什么选择Netty   netty是业界最流行的NIO框架之一,它的健壮型,功能,性能,可定制性和可扩展性都是首屈一指的,Hadoop的RPC框架Avro就使用了netty作为底层的通信框架,此外netty在互联网,大数据,网络游戏,企业应用,电信软件等众多行业都得到了成功的商业应用。正因为以上的一些特性,使得netty已经成为java NIO编程的首选框架。 构建netty开发环境 其实使用netty很简单,直接将其jar包引入到工程中即可使用。 去 http://netty.io/网站上下载最新版本
SecondWorld
2018/03/14
1.2K0
Netty 私有协议粘包拆包实例
接下来,采用 Java + Netty 模拟该组件的功能,以演示私有协议下 netty 的粘包/拆包的实现。
鲍远林
2022/03/26
1K0
Netty系列--简介
Dlimeng
2023/06/29
1700
Netty第一个入门实例-TCP服务
好了netty的第一个入门案例就到此了,具体的代码解释请多看代码中的注释,有不清楚的欢迎留言交流 O(∩_∩)O哈哈~
用户4919348
2019/12/31
5.1K0
Netty中级篇
之前说过用NIO实现聊天室,现在来看看用netty如何实现聊天室。这里我将新建两个maven项目,一个服务端,一个客户端,最后可以打成jar包,服务端jar包运行在你电脑上,客户端jar包自己跑一份,还可以发给你的同事,然后就可以愉快的聊天了。
贪挽懒月
2020/08/11
1.1K0
Netty解决TCP粘包/拆包的问题
什么是TCP粘包/拆包   首先要明确, 粘包问题中的 “包”, 是指应用层的数据包.在TCP的协议头中, 没有如同UDP一样的 “报文长度” 字段,但是有一个序号字段.   站在传输层的角度, T
用户4919348
2019/04/19
1.2K0
Netty解决TCP粘包/拆包的问题
Java网络编程--Netty入门
Netty是一个高性能,高可扩展性的异步事件驱动的网络应用程序框架,它极大的简化了TCP和UDP客户端和服务器端网络开发。它是一个NIO框架,对Java NIO进行了良好的封装。作为一个异步NIO框架,Netty的所有IO操作都是异步非阻塞的,通过Future-Listener机制,用户可以方便的主动获取或者通过通知机制获得IO操作结果。
CodingDiray
2019/09/25
6130
Java网络编程--Netty入门
Netty(三)之数据之粘包拆包
客户端发送10个长度的字符串,因为设置了长度为5的定长解码器,所以服务器收到2条消息
CBeann
2023/12/25
2270
Netty(三)之数据之粘包拆包
Netty入门_合并财务报表应用指南
一个简单的NIO服务端程序,如果我们直接使用JDK的NIO类库进行开发,竟然需要经过繁琐的十多步操作才能完成最基本的消息读取和发送,这也是我们选择Netty框架的原因了。下面我们看看Netty是如何轻松搞定服务端开发的。
全栈程序员站长
2022/11/09
3890
09-Netty 高性能架构设计-基于Netty开发TCP服务
Netty快速入门实例-TCP服务 需求 使用IDEA创建Netty项目 Netty服务器在6668端口监听, 客户端能发送消息给服务器"Hello, 服务器~" 服务器可以回复消息给客户端"hello, 客户端~" 目的: 对Netty线程模型 有一个初步认识, 便于理解Netty 模型理论 编写服务端 编写客户端 对Netty程序进行分析, 看看Netty模型特点 添加Netty依赖 <!-- https://mvnrepository.com/artifact/io.netty/netty-all -
彼岸舞
2022/02/18
5450
相关推荐
Netty 之入门应用
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验