Netty là một NIO ( Non-blocking Input Output) framework dành cho việc 
phát triển hệ thống client-server trong lập trình các chương tình mạng bằng ngôn 
ngữ Java, ví dụ như các giao thức mạng client-server.
“Netty is an asynchronous event-driven network application framework for 
rapid development of maintainable high performance protocol servers & clients”. 
Có nghĩ rằng, netty là tên một bộ khung (framework) không đồng bộ dành cho các 
chương trình mạng hướng sự kiện, nó dành cho việc phát triển nhanh các giao thức 
mạng client-server có hiệu năng cao, dễ vận hành và bảo trì.
                
              
                                            
                                
            
                       
            
                 27 trang
27 trang | 
Chia sẻ: lylyngoc | Lượt xem: 4078 | Lượt tải: 2 
              
            Bạn đang xem trước 20 trang tài liệu Đề tài : Nghiên cứu về Netty Framework, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
1 
BÁO CÁO MÔN HỌC 
Đề tài: Nghiên cứu về Netty 
Framework 
TP. Hồ Chí Minh, tháng 12 năm 2012 
Giảng viên hướng dẫn: 
 ThS Nguyễn Trác Thức 
Sinh viên thực hiện: 
1. Võ Xuân Ngọc 10520202. 
2. Nguyễn Đình Hòa 10520096. 
3. Đào Xuân Hiển 10520212. 
ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH 
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN 
1 
MỤC LỤC 
CHƯƠNG 1. GIỚI THIỆU SƠ LƯỢC VỀ NETTY FRAMEWORK .. 1 
1. LỊCH SỬ HÌNH THÀNH VÀ PHÁT TRIỂN NETTY 
FRAMEWORK ....................................................................................................... 1 
1.1. Netty framework là gì? .................................................................. 1 
1.2. Lịch sử phát triển ........................................................................... 1 
2. SO SÁNH NETTY VỚI CÁC FRAMEWORK KHÁC ................... 2 
CHƯƠNG 2. KIẾN TRÚC CỦA NETTY FRAMWORK ...................... 3 
1. DỊCH VỤ VẬN CHUYỂN (TRANSPORT SERVICE) ................... 3 
2. HỖ TRỢ GIAO THỨC (PROTOCOL SUPPORT) ......................... 3 
3. LÕI (CORE) ......................................................................................... 4 
CHƯƠNG 3. CÁC API TRONG NETTY FRAMEWORK ................... 5 
1. LOW-LEVEL DATA REPRESENTATION ..................................... 5 
2. CENTRAL INTERFACE FOR ALL I/O OPERATIONS ............... 5 
3. CLIENT & SERVER BOOTSTRAPPING UTILITIES .................. 9 
4. REUSABLE I/O EVENT INTERCEPTORS .................................. 10 
5. MISCELLANEOUS ........................................................................... 18 
CHƯƠNG 4. CÁC KHÁI NIỆM CĂN BẢN .......................................... 20 
CHƯƠNG 5. HƯỚNG DẪN CÀI ĐẶT VÀ SỬ DỤNG VỚI NETBEAN
 21 
CHƯƠNG 6. DEMO VÀ HƯỚNG DẪN CHI TIẾT DEMO ............... 25 
1 
CHƯƠNG 1. GIỚI THIỆU SƠ LƯỢC VỀ NETTY FRAMEWORK 
1. LỊCH SỬ HÌNH THÀNH VÀ PHÁT TRIỂN NETTY FRAMEWORK 
1.1. Netty framework là gì? 
Netty là một NIO ( Non-blocking Input Output) framework dành cho việc 
phát triển hệ thống client-server trong lập trình các chương tình mạng bằng ngôn 
ngữ Java, ví dụ như các giao thức mạng client-server. 
“Netty is an asynchronous event-driven network application framework for 
rapid development of maintainable high performance protocol servers & clients”. 
Có nghĩ rằng, netty là tên một bộ khung (framework) không đồng bộ dành cho các 
chương trình mạng hướng sự kiện, nó dành cho việc phát triển nhanh các giao thức 
mạng client-server có hiệu năng cao, dễ vận hành và bảo trì. 
Netty được sử dụng để lập trình các socket server đơn giản như UDP và 
TCP. 
Bên cạnh việc là một “asynchronous framework” dành cho việc phát triển 
các ứng dụng mạng, netty đòng thời cũng được xây dựng và mang trong mình việc 
hỗ trợ chuẩn giao thức mạng HTTP, nó cũng mang đến khả năng chạy bên trong 
một “servlet container” (web container), hỗ trợ cho WebSockets, tích hợp được với 
Google Protocol Buffers, hỗ trợ 2 chuẩn bả mật SSL/TLS.cũng như giao thức 
SPDY. 
1.2. Lịch sử phát triển 
Netty framework được phát triển bởi cộng đồng Netty (Netty Project 
Community). 
Vào tháng 6 năm 2004, phiên bản netty 2.1.0 chính thức ra mắt. 
Vào tháng 11 năm 2011, phiên bản 3.2.7 được ra mắt. 
Vào tháng 7 năm 2013, phiên bản 4.0.0 được ra mắt. Hiện tại phiên bản cuối 
cùng là 4.0.13 và đang alpha phiên bản 5.0.0 . 
2 
2. SO SÁNH NETTY VỚI CÁC FRAMEWORK KHÁC 
Với Apache Mina, về cơ bản thì 2 framework này giống nhau hiện nay hầu 
hết các tính năng có sẵn trong Mina cũng có sẵn trong Netty. Nó đơn giản hơn 
Mina, giải quyết được một số vấn đề trong thiết kế nhưng vẫn giữ lại được các tính 
năng nổi tiếng của Mina . 
Netty có chu trình phát triển nhanh hơn , dựa vào lịch sử các phiên bản các 
bạn có thể thấy sự phát triển nhanh chóng của Netty nhiều hơn rất nhiều so với 
Mina. 
Mina được thiết kế ở mức độ cao hơn nhưng Netty có được hầu hết các tính 
năng có sẵn của Mina và có tốc độ nhanh hơn. 
3 
CHƯƠNG 2. KIẾN TRÚC CỦA NETTY FRAMWORK 
Netty xây dựng các winform trên cơ sở các dịch vụ vận chuyển và hỗ trợ 
webform với các giao thức trên nền web 
1. DỊCH VỤ VẬN CHUYỂN (TRANSPORT SERVICE) 
Bao gồm các service Socket & Datagram, Http Tunnel và In-VM Pipe 
- Socket & Datagram: Dựa trên giao thức UDP (User Datagram 
Protocol), là giao thức hướng thông điệp (message oriented). Việc 
truyền dữ liệu không yêu cầu có sự thiết lập kết nối giữa tiến quá trình. 
Ngược lại với giao thức TCP thì dữ liệu được truyền theo giao thức 
UDP. 
- Http Tunnel: là một kỹ thuật đóng gói dữ liệu của các giao thức khác ( 
TCP/IP ) trong một gói tin HTTP để có thể vượt qua tường lửa được 
được triển khai dưới hình thức client-server. 
- In-VM Pipe 
2. HỖ TRỢ GIAO THỨC (PROTOCOL SUPPORT) 
- Http & Web Socket: là công nghệ hỗ trợ giao tiếp hai chiều giữa client 
và server bằng cách sử dụng một TCP socket để tạo một kết nối hiệu 
4 
quả và ít tốn kém. Mặc dù được thiết kế để chuyên sử dụng cho các ứng 
dụng web, lập trình viên vẫn có thể đưa chúng vào bất kì loại ứng dụng 
nào. 
- SSL-StartTLS: SSL là viết tắt của từ Secure Sockets Layer. Đây là một 
tiêu chuẩn an ninh công nghệ toàn cầu tạo ra một liên kết được mã hóa 
giữa máy chủ web và trình duyệt. Liên kết này đảm bảo tất cả các dữ 
liệu trao đổi giữa máy chủ web và trình duyệt luôn được bảo mật và an 
toàn. SL đảm bảo rằng tất cả các dữ liệu được truyền giữa các máy chủ 
web và các trình duyệt được mang tính riêng tư, tách rời. SSL là một 
chuẩn công nghiệp được sử dụng bởi hàng triệu trang web trong việc 
bảo vệ các giao dịch trực tuyến với khách hàng của họ. TLS, là viết tắt 
của Transport Layer Security. 
- Google Protobuf: là một cachsdđể mã hóa cấu trúc dữ liệu, Google sử 
dụng Protocol Buffers cho gần như tất cả các giao thức RPC nội bộ của 
mình và các định dạng. 
- Zlib/ gzip compression: 2 công nghệ nén nhằm giúp tăng hiệu năng hệ 
thống. 
- Larg file transfer: 
- RTSP: Real Time Streaming Protocol, giao thức tạo luồng thời gian 
thực, RTSP là một giao thức điều khiển cho việc khởi tạo định hướng 
việc vận chuyển các dòng dữ liệu đa phương tiện từ máy chủ đa phương 
tiện.. 
- Legacy Text, Binary Protocol with Unit Testability 
3. LÕI (CORE) 
- Extensible Event Model: Cho phép ta tách biệt rõ ràng các concern. 
- Universal Communication API 
- Zero-copy-capable Rich Byte Buffer 
5 
CHƯƠNG 3. CÁC API TRONG NETTY FRAMEWORK 
1. LOW-LEVEL DATA REPRESENTATION 
- io.netty.buffer - Abstraction of a byte buffer - the fundamental data 
structure to represent a low-level binary and text message. 
2. CENTRAL INTERFACE FOR ALL I/O OPERATIONS 
- io.netty.channel - The core channel API which is asynchronous and 
event-driven abstraction of various transports such as a NIO Channel. 
6 
- io.netty.channel.embedded - A virtual Channel that helps wrapping a 
series of handlers to unit test the handlers or use them in non-I/O 
context. 
- io.netty.channel.group - A channel registry which helps a user maintain 
the list of open Channels and perform bulk operations on them. 
- io.netty.channel.local - A virtual transport that enables the 
communication between the two parties in the same virtual machine. 
7 
- io.netty.channel.nio - NIO-based channel API implementation - 
recommended for a large number of connections (>= 1000). 
- io.netty.channel.oio - Old blocking I/O based channel API 
implementation - recommended for a small number of connections (< 
1000). 
- io.netty.channel.rxtx - A serial and parallel port communication 
transport based on RXTX. 
- io.netty.channel.sctp - Abstract SCTP socket interfaces which extend 
the core channel API. 
8 
- io.netty.channel.sctp.nio - NIO-based SCTP Channel API 
implementation - recommended for a large number of connections (>= 
1000). 
- io.netty.channel.sctp.oio - Old blocking I/O based SCTP channel API 
implementation - recommended for a small number of connections (< 
1000). 
- io.netty.channel.socket - Abstract TCP and UDP socket interfaces 
which extend the core channel API. 
- io.netty.channel.socket.nio - NIO-based socket channel API 
implementation - recommended for a large number of connections (>= 
1000). 
9 
- io.netty.channel.socket.oio - Old blocking I/O based socket channel API 
implementation - recommended for a small number of connections (< 
1000). 
- io.netty.channel.udt - UDT Transport. 
- io.netty.channel.udt.nio - UDT Transport for NIO Channels. 
3. CLIENT & SERVER BOOTSTRAPPING UTILITIES 
- io.netty.bootstrap - Là lớp phụ trợ với các API có khả năng thực thi một 
cách dễ dàng việc khởi động các channel ở cả client và cả phía server. 
10 
4. REUSABLE I/O EVENT INTERCEPTORS 
- io.netty.handler.codec - Extensible decoder and its common 
implementations which deal with the packet fragmentation and 
reassembly issue found in a stream-based transport such as TCP/IP. 
- io.netty.handler.codec.base64 - Encoder and decoder which transform a 
Base64-encoded String or ByteBuf into a decoded ByteBuf and vice 
versa. 
- io.netty.handler.codec.bytes - Encoder and decoder which transform an 
array of bytes into a ByteBuf and vice versa. 
11 
- io.netty.handler.codec.compression - Encoder and decoder which 
compresses and decompresses ByteBufs in a compression format such 
as zlib, gzip, and Snappy. 
- io.netty.handler.codec.http - Encoder, decoder and their related 
message types for HTTP. 
12 
- io.netty.handler.codec.http.multipart - HTTP multipart support. 
13 
- io.netty.handler.codec.http.websocketx - Encoder, decoder, 
handshakers and their related message types for Web Socket data 
frames. 
- io.netty.handler.codec.marshalling - Decoder and Encoder which uses 
JBoss Marshalling. 
14 
- io.netty.handler.codec.protobuf - Encoder and decoder which transform 
a Google Protocol Buffers Message into a ByteBuf and vice versa. 
- io.netty.handler.codec.rtsp - An RTSP extension based on the HTTP 
codec. 
- io.netty.handler.codec.sctp - Decoder and encoders to manage message 
completion and multi-streaming codec in SCTP/IP. 
- io.netty.handler.codec.serialization - Encoder, decoder and their 
compatibility stream implementations which transform a Serializable 
object into a byte buffer and vice versa. 
15 
- io.netty.handler.codec.socks - Encoder, decoder and their related 
message types for Socks. 
- io.netty.handler.codec.spdy - Encoder, decoder, session handler and 
their related message types for the SPDY protocol. 
16 
- io.netty.handler.codec.string - Encoder and decoder which transform a 
String into a ByteBuf and vice versa. 
17 
- io.netty.handler.logging - Logs a io.netty.channel.ChannelEvent for 
debugging purpose. 
- io.netty.handler.ssl - SSL · TLS implementation based on SSLEngine 
- io.netty.handler.stream - Writes very large data stream asynchronously 
neither spending a lot of memory nor getting OutOfMemoryError. 
- io.netty.handler.timeout - Adds support for read and write timeout and 
idle connection notification using a Timer. 
- io.netty.handler.traffic - Implementation of a Traffic Shaping Handler 
and Dynamic Statistics. 
18 
5. MISCELLANEOUS 
- io.netty.util - Utility classes used across multiple packages. 
- io.netty.util.concurrent - Utility classes for concurrent / async tasks. 
19 
20 
CHƯƠNG 4. CÁC KHÁI NIỆM TRONG NETTY FRAMEWORK 
Ở phần này, chúng ta sẽ nói qua một chút về các khái niệm trong netty 
framework. 
1. BYTEBUF 
Chia dữ liệu đọc và ghi thành các phần riêng rẽ 
ByteBuf nhiều loại 
Thực thi Direct và Heap 
Có khả năng thay đổi kích thước để phù hợp đường truyền 
Có sự hỗ trợ cho reference-counting Method-Chaining 
2. CHANNEL 
Client chỉ kết nối qua 1 channel và mỗi channel chỉ gắn với 1 kết nối. 
3. PIPELINE 
Pipeline được dựng trên 1 channel để tối ưu hóa đường truyền. Bằng cách 
phân luồng. 
21 
22 
CHƯƠNG 5. HƯỚNG DẪN CÀI ĐẶT VÀ SỬ DỤNG VỚI NETBEAN 
Bước 1, chúng ta tìm và tải Netty từ trang  
Bước 2, sau khi tải về, giải nén ra, chúng ta sẽ được 1 thư mục, trong đó có 1 
file có tên netty-all-x.x.xx (x.x.xx là tên phiên bản bạn tải về, trong hình minh họa, 
chúng tôi sử dụng bản mới nhất vào thời điểm làm bài báo cáo, là bản 4.0.13). 
Bước 3, vào trong netbean, vào Project của bạn, sau đó vào phần libraries. 
Bước 4, chọn button Add JAR/Folder 
23 
Bước 5, Ở trên của sổ hiện lên, ta tìm đến thư mục chứa file netty đã nói ở 
trên, và chọn nó, ấn Open. 
Bước 6, Trở lại màn hình libraries, nhấn OK. 
24 
Vậy là chúng ta đã hoàn thành các bước để có thể sử dụng netty framework 
trong netbean. 
25 
CHƯƠNG 6. DEMO VÀ HƯỚNG DẪN CHI TIẾT DEMO 
Demo và cách thức thực hiện chương trình chúng em sẽ trình bài vào buổi 
thuyết trình.