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 |
Chia sẻ: lylyngoc | Lượt xem: 3762 | 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.