Báo cáo môn học: Nghiên cứu về Netty Framework
Trang 11
Đề tài: Nghiên cứu về Netty Framework
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
Trang 21
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
Trang 31
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
Trang 42
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
Trang 53
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
Trang 64
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
Trang 75
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
Trang 8- io.netty.channel.local - A virtual transport that enables the
communication between the two parties in the same virtual machine
Trang 97
- 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
Trang 108
- 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)
Trang 119
- 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
Trang 1210
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
Trang 1311
- 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
Trang 1412
- io.netty.handler.codec.http.multipart - HTTP multipart support
Trang 1513
- 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
Trang 1614
- 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
Trang 1715
- 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
Trang 1816
- io.netty.handler.codec.string - Encoder and decoder which transform a String into a ByteBuf and vice versa
Trang 1917
- 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
Trang 2018
5 MISCELLANEOUS
- io.netty.util - Utility classes used across multiple packages
- io.netty.util.concurrent - Utility classes for concurrent / async tasks
Trang 2119
Trang 2220
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
Trang 2321
Trang 2422
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 http://netty.io/downloads.html 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
Trang 2624 Vậy là chúng ta đã hoàn thành các bước để có thể sử dụng netty framework trong netbean
Trang 2725
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