Đề tài : Nghiên cứu về Netty Framework

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ì.

pdf27 trang | Chia sẻ: lylyngoc | Lượt xem: 3741 | Lượt tải: 2download
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.