购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.3 实战:Netty版的“Hello World”程序

本节通过IntelliJ IDEA开发工具创建一个基本的Netty会话应用,实现最简单的“Hello World”功能。

1.3.1 使用IntelliJ IDEA创建项目

使用IntelliJ IDEA创建项目的具体步骤如下:

步骤01 通过IntelliJ IDEA开发工具创建一个Java应用程序,具体操作是在IntelliJ IDEA开发界面中选择文件(File)菜单|新建工程(New Project)菜单项,单击后会弹出一个标题为“New Project”的选项窗口,如图1.9所示。

图1.9 通过IntelliJ IDEA创建Java应用程序

步骤02 如图1.9中的标识所示,窗口最左侧显示了可以创建的工程类别,我们只需要选中“Java”项,就可以新建Java应用程序。另外,还需要甄别一下“Project SDK”列表中,默认选中的是否为当前操作系统所配置的JDK版本(如果读者所配置的JDK开发环境正确就不会有问题,IntelliJ IDEA开发工具会自动选择正确的JDK版本)。

步骤03 单击Next按钮进行下一步,此时IntelliJ IDEA开发工具会弹出一个创建工程模板界面,具体如图1.10所示。

图1.10 创建Java应用程序工程项目模板界面

步骤04 这一步不进行任何操作,直接继续单击Next按钮进行下一步。

步骤05 此时弹出一个选择工程项目路径及定义工程项目名称“HelloNetty”的界面,如图1.11所示。

图1.11 定义Java应用程序工程项目路径及名称

步骤06 选择好Java工程项目的路径,并定义好Java工程名称,然后单击Finish按钮完成操作。

步骤07 此时,IntelliJ IDEA开发工具会为我们创建一个空的Java工程项目HelloNetty,具体如图1.12所示。

图1.12 创建空的Java工程项目“HelloNetty”

步骤08 展开工程项目HelloNetty会看到一个src目录,后面的Java源代码文件就放在其中。

步骤09 创建好空的Java工程项目之后,就可以编写Netty程序了。

1.3.2 引入Netty包

在正式编写Netty程序之前,我们需要先将Netty框架的核心jar包文件(前文中引用的netty-all-4.1.48.Final.jar文件)引入到本Java工程项目之中。具体的操作方式如下:

步骤01 在工程项目的根目录下新建一个名称为“lib”的子目录,然后将“netty-all-4.1.48.Final.jar”文件引入其中,如图1.13所示。

图1.13 创建子目录“lib”并引入jar文件

步骤02 在引入“netty-all-4.1.48.Final.jar”文件后,还需要进行一步非常关键的操作,就是将该jar文件添加到工程项目的依赖关系之中。

对于IntelliJ IDEA开发工具而言,需要在文件(File)菜单中选择“Project Structure”项,打开工程设置“Project Settings”对话框界面,如图1.14所示。

图1.14 打开“Project Settings”对话框界面

在工程设置“Project Settings”对话框界面中,选中模块“Modules”菜单项,然后再选中依赖关系“Dependencies”选项卡,最后将“netty-all-4.1.48.Final.jar”文件添加到本工程项目的依赖关系中去,具体效果如图1.15所示。

图1.15 将“netty-all-4.1.48.Final.jar”文件添加到依赖关系中

操作完成后会在依赖关系窗口中看到新添加进去的“netty-all-4.1.48.Final.jar”文件。

步骤03 单击OK按钮关闭该窗口完成操作,此时会看到工程目录的变化,如图1.16所示。展开“netty-all-4.1.48.Final.jar”包文件,会看到Netty框架开发包的核心目录结构。

图1.16 “HelloNetty”工程目录变化

1.3.3 编写Netty应用程序

我们在成功引入Netty框架的核心开发文件“netty-all-4.1.48.Final.jar”后,就可以编写Netty应用程序了。

Netty应用实际上是一种Java IO会话应用,因此需要分别编写服务器端程序和客户端程序,其中核心关键是服务器端程序。在本章的实战应用中,我们仅仅编写一个用于入门的Netty服务端程序(仅仅接收客户端发来的信息),而客户端通过Telnet控制台应用来模拟。

Netty服务应用模块一般包括两个Java文件:一个是Server类文件;另一个是Server类对应的Server Handler类文件。一般地,Server类文件用于实现接口操作功能,Server Handler类文件用于实现具体的业务逻辑操作功能。当然,将Server类文件与Server Handler类文件合并写在一个Java Class文件中也是允许的,只不过代码逻辑会有些混乱,可读性自然也会差很多。

在本实战应用中,我们分别创建一个Server类文件(名称为HelloNettyServer.java),以及其所对应的Server Handler类文件(名称为HelloNettyServerHandler.java),工程目录如图1.17所示。

图1.17 服务器端类文件

在“src”目录下新建了两个Java类文件:HelloNettyServer.java与HelloNettyServerHandler.java,主要代码如下。

【代码1-1:HelloNettyServer类文件】

(详见源代码HelloNetty\src\netty\king\HelloNettyServer.java文件)

关于【代码1-1】的说明如下:

· 第03~10行代码中,通过import指令引入了服务器端HelloNettyServer类代码所需要的Netty框架核心模块。

· 第12~60行代码是服务器端HelloNettyServer类的实现过程,主要包括了第18~20行代码所定义的HelloNettyServer类的构造函数、第25~46行代码定义的处理服务器端IO操作的事件循环方法(run),第52~59行代码定义了主入口方法(main)。

【代码1-2:HelloNettyServerHandler类文件】

(详见源代码HelloNetty\src\netty\king\HelloNettyServerHandler.java文件)

关于【代码1-2】的说明如下:

· 第03~06行代码中,通过import指令引入了服务器端HelloNettyServerHandler类代码所需要的Netty框架核心模块。

· 第08~33行代码是服务器端HelloNettyServerHandler类的实现过程,主要包括了第13~23行代码定义的从IO通道读取客户端的重载方法(channelRead),第29~32行代码定义的异常捕获方法(exceptionCaught)。

以上是关于【代码1-1】与【代码1-2】的基本说明,更详细的、有针对性的解释说明将在后续的章节中介绍。

1.3.4 测试HelloNetty服务器端应用

下面使用IntelliJ IDEA开发工具平台测试运行一下这个简单的HelloNetty服务器端应用。

(1)在主菜单中运行(Run)菜单中的“Run”命令运行HelloNettyServer.java文件,此时运行窗口中会有相应的信息提示,如图1.18所示。

图1.18 测试运行服务器端程序

运行窗口中输出了【代码1-1】中第53行代码定义的调试信息,证明HelloNetty会话应用的服务器端已经正确运行了。

(2)为了进一步测试HelloNetty会话应用的功能,使用Windows系统自带的Telnet服务(模拟客户端)向服务器端发送一些测试信息。

打开Windows系统的控制台进入Telnet服务,然后通过open命令连接到服务器端,如图1.19所示。

图1.19 在客户端通过Telnet服务连接服务器端

通过Telnet服务的open命令可以连接到指定的服务器(localhost)地址及其端口号(8080)。其中,地址(localhost)表示本机地址,因为我们是在单机系统上测试的,而端口号(8080)是依据【代码1-1】中第54行代码的定义。

(3)直接按回车键进入命令行模式,向服务器端发送测试信息“Hello Netty!”,如图1.20所示。

图1.20 在客户端通过Telnet服务向服务器端发送测试信息

(4)返回IntelliJ IDEA开发工具中的运行窗口观察是否有变化,如图1.21所示。

图1.21 服务器端接同步收到客户端发来的测试信息

如图1.21中的标识所示,同步收到的测试信息与客户端发送的信息完全一致,证明我们的HelloNetty会话服务运行良好。

(5)通过在客户端断开与服务器端的连接,或直接停止服务器端程序的运行,来断开服务器端与客户端的会话连接,运行窗口的变化如图1.22所示。

图1.22 断开服务器端与客户端的会话连接

至此,最基本的Netty实战应用(HelloNetty)的开发与测试工作就完成了,相信此时读者通过这个实战应用已经对Netty框架的功能有了一个最基本的了解。不过现在才刚刚开始,后面会更加精彩。 eSpmmZioX5By4URYeVGQPtzkBC7A2y3/+7xASY0vWKvE6KHNF1Dv0E81m6lJU7rd

点击中间区域
呼出菜单
上一章
目录
下一章
×