MỞ ĐẦU Web đóng vai trò quan trọng trong Công nghệ thông tin. Web đóng vai trò kết nối ngƣời dùng. Ứng dụng web đƣợc phát triển ban đầu với sự xuất hiện của HTML vào năm 1993, công bố bởi tổ chức W3C (World wide web consortium). Sau đó nhiều công nghệ web động mang đến cho ngƣời dùng và nhà phát triển trải nghiệm mới.
PHP đƣợc phát triển từ năm 1999, là 1 loại Server-side scripting. Tính đến nay đã áp dụng cho hơn 240 triệu trang web và 2.1 triệu máy chủ web. Hiện giờ đang phát triển đến phiên bản 5. Ngoài PHP, Microsoft đƣa ra ASP (Active server page) và ASP.
Java thì đƣa ra JSP. Làm cho cộng đồng phát triển web càng thêm phong phú. Từ nhu cầu phát triển web, một kỹ thuật mới đƣợc ngƣời ta phát minh ra là Asynchronous Javascript and XML (AJAX) đƣợc chính thức công bố vào 18/02/2005. Kỹ thuật này cho phép gửi nhận dữ liệu một cách bất đồng bộ từ Client đến Web-server.
Vào những năm gần đây, với sự bùng nổ của các thiết bị di động – smart phone, máy tính bảng. Ứng dụng web ngoài việc hỗ trợ Browser trên máy tính còn phát triển trên các trình duyệt với giao thức WAP. NodeJS ra đời cũng nằm trong xu thế phát triển chung, NodeJS đƣợc thiết kế để xây dựng các ứng dụng Web hoặc Network nhanh, khả mở, và chạy trên nhiều thiết bị. Nodejs đang đƣợc phát triển và sử dụng rộng rãi.
Nodejs đang ở phiên bản v0.28 và tính đến thời điểm này đang có 9969 revision có 524 contributor cho việc phát triển. Bài luận văn viết ra với mục đích giới thiệu về công nghệ Nodejs. Phƣơng pháp và cách làm của Nodejs khi áp dụng vào các trang web có phản ứng tức thời. Sự khác biệt đó ra sao với Ajax khi mà họ sử dụng Request/response thông qua XMLHttpRequest so với Websocket của Nodejs.
Đồng thời giới thiệu về kiến trúc bên trong của Nodejs. Hiệu năng của Nodejs so với các Application server phổ biến. Ứng dụng 13Instant là ứng dụng demo công nghệ Nodejs, sử dụng công nghệ Nodejs để phát triển các tính năng đòi hỏi phản ứng tức thời trên Web nhƣ web chat, news feed, instant searching. Bài luận văn chia gồm 5 chƣơng chính vớiý tƣởng chủ đạo của từng chƣơng nhƣ sau: 3 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Chƣơng 1.
Tổng quan về Web đáp ứng tức thời: Chƣơng này làm rõ, giới thiệu Web đáp ứng tức thời là gì. Lịch sử, các công nghệ đang sử dụng để thực hiện. Nodejs: Chƣơng này giới thiệu về Nodejs, Nodejs là gì, ý nghĩa, tác dụng. Kiến trúc của Nodejs.
Tổ chức Module Nodejs. Hiệu năng Nodejs: Chƣơng này so sánh hiệu năng của Nodejs với các Application server phổ biến. Ứng dụng 13Instant: Chƣơng giới thiệu ứng dụng 13Instant. Là ứng dụng áp dụng Nodejs vào để tạo ra 1 ứng dụng Web phản ứng tức thời gồm News feed và Web chat.
Kết luận: Kết luận về công nghệ Nodejs, ƣu điểm của Nodejs so với các nền tảng khác. Về nhỏ gọn, nhanh chóng, và dễ dàng phát triển. Và đánh giá về tƣơng lai công nghệ Nodejs. 4 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com MỤC LỤC LỜI CAM ĐOAN.
5 DANH MỤC HÌNH VẼ. 6 DANH MỤC THUẬT NGỮ. TỔNG QUAN VỀ WEB ĐÁP ỨNG TỨC THỜI. GIỚI THIỆU VỀ NODEJS.
TỔNG QUAN VỀ NODEJS. NỀN TẢNG THIẾT KẾ NODEJS. NODEJS VÀ CƠ SỞ DỮ LIỆU. THỰC THI WEBSOCKET VỚI SOCKET.IO CỦA NODEJS.
HIỆU NĂNG NODEJS. CÁC VẤN ĐỀ VỀ HIỆU NĂNG NODEJS. TEST HIỆU NĂNG NODEJS VÀ APACHE. ỨNG DỤNG 13INSTANT.
THIẾT KẾ CHƢƠNG TRÌNH. 85 TÀI LIỆU THAM KHẢO. 86 5 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com DANH MỤC HÌNH VẼ Hình 1. Giao tiếp http thông thƣờng.
Ajax long poll. Server-sent-events. Kiến trúc Nodejs. Benchmark Nginx, node, tornado, thin.
Biểu đồ Benchmark Nginx, thin, tornado, node. Biểu đồ benchmark Nginx,thin,tornado. Biểu đồ Benchmark nginx, thin, tornado, node theo response time. Biểu đồ benchmark Nginx, thin, tornado, node_buffer.
Nền tảng biên dịch Nodejs. Biểu đồ thời gian phản hồi. Biểu đồ tỷ lệ lỗi. Biểu đồ tốc độ truyền dữ liệu (MBps).
Biểu đồ thời gian phản hồi. Biểu đồ tỷ lệ lỗi. Biểu đồ tốc độ truyền dữ liệu (Byte-rate). Mô hình tổng quát 13instant.
Use case 13Instant. Các bảng cơ sở dữ liệu. Màn hình đăng nhập. Trang newsfeed của 13Instannt.
Instant chat của 13instant. 84 6 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com DANH MỤC THUẬT NGỮ STT Thuật ngữ Ý nghĩa World wide web, là 1 hệ thống các liên kết nối siêu văn 01 WEB bản (Hyper text document) mà có thể truy cập đƣợc từ Internet. Hoặc đƣợc viết là web site, hoặc là site. Là tập các trang 02 Website Web có liên quan đến nhau, phục vụ trong Wireless Application Protocol là một tiêu chuẩn kỹ thuật 03 WAP cho phép truy cập thông tin qua Mạng di động.
Asynchronous Javascript and XML: là một tập hợp các kỹ 04 Ajax thuật có liên quan đến nhau trong phát triển Web để tạo ra ứng dụng Web bất đồng bộ. V8 là 1 engine (công cụ) mã nguồn mở Javascript của 05 V8 Google. Viết bằng C++ và sử dụng trong Google Chrome. Trong lập trình máy tính, mẫu Thread pool (hoặc replicated workers hoặc worker-crew model) là nơi số 06 Thread pool lƣợng thread đƣợc tạo ra để thực hiện 1 số lƣợng các tác vụ.
Là 1 thƣ viện đầy đủ tính năng (full-featured) I/O bất đồng 07 Libeio bộ cho ngôn ngữ C. Là khả năng của hệ thống, network hoặc tiến trình (process) có thể làm chủ sự tăng trƣởng của công việc theo 08 Scalability cách hợp lý hoặc là khả năng của nó có thể lớn lên để thỏa mãn sự tăng trƣởng này. Một thuật ngữ trong khoa học máy tính (hoặc tên khác Message Dispatcher, Message Loop, Message Pump hoặc 09 Event loop Run loop). Là cấu trúc lập trình mà chờ đợi là gửi đi các sự kiện hoặc thông điệp trong 1 chƣơng trình.
Mỗi request có event handler tƣơng ứng. Một Event loop implementation đầy đủ tính năng và hiệu 10 Libev năng cao mà mô hình theo libevent. Đƣợc sử dụng trong GNU Virtual Private Ethernet, rxvt-unicode, auditd, 7 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Deliantra MORPG. Một thuật ngữ trong lập trình máy tính, callback là 1 đoạn 11 Callback code đƣợc truyền vào nhƣ 1 tham số của 1 đoạn code khác, 12 Heap memory Một vùng bộ nhớ đƣợc cấp phát động.
13 Thread-stack Memory dạng stack hỗ trợ làm việc trong Thread. Là 1 trạng thái mà 2 công việc cạnh tranh chờ nhau kết 14 Dead-lock thúc, dẫn đến không công việc nào kết thúc cả. Event Machine là 1 hệ thống phần mềm đƣợc thiết kế để 15 Ruby Event Machine viết ứng dụng chuyên mở rộng cho Ruby. Nó cung cấp event-driven I/O mà sử dụng reactor pattern.
Là một framework event-driven network programming 16 Python Twisted đƣợc viết bởi Python. Nằm dƣới sự quản lý của MIT license. HTTP Server phát triển bởi Apache Software Foundation. Dịch vụ HTTP service an ninh, hiệu quả, và khả mở với 17 Apache các chuẩn HTTP hiện có.
Cross platform trên cả Windows và Linux. Proxy reverse server mã nguồn mở cho các giao thức 18 Nginx HTTP, HTTPS, SMTP, POP3, và IMAP chạy nhƣ là Load balancer, HTTP cache và cũng là một Webserver. Trong lĩnh vực máy tính, 1 context switch là 1 tiến trình lƣu trữ và phục hồi trạng thái (context) của 1 process hoặc 19 Context switch thread, làm cho việc thực thi có thể đƣợc hồi phục tại cùng điểm lƣu trữ tại 1 thời điểm khác. Trong khoa học máy tính, Excecution stack (còn gọi là 20 Execution stack callstack) là 1 cấu trúc ngăn xếp mà lƣu trữ thông tin về các phƣơng thức và chƣơng trình đang chạy.
Còn đƣợc gọi là Asynchronous I/O. Là 1 dạng của xử lý 21 Non blocking I/O input/ouput mà cho phép các xử lý khác tiếp tục chạy trƣớc khi mà giao dịch I/O chấm dứt. 22 Network traffic Network traffic hoặc data traffic trong 1 mạng máy tính. 8 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com Data đƣợc đo bằng Network packets.
Hệ quản trị cơ sở dữ liệu hƣớng đối tƣợng-quan hệ. Phát 23 Postgresql triển bằng ngôn ngữ C, và giấy phép là PostgresSQL license. Thƣ viện Javascript cho ứng dụng web thời gian thực.io trợ realtime, giao tiếp bi-directional cho web client và server. Là 1 giao thức cung cấp kênh giao tiếp full-duplex qua 1 25 Websocket kết nối TCP.
Giao thức đƣợc W3C chuẩn hóa. 9 LUAN VAN CHAT LUONG download : add luanvanchat@agmail.com CHƢƠNG 1. TỔNG QUAN VỀ WEB ĐÁP ỨNG TỨC THỜI Web đáp ứng thời gian tức thời đƣợc gọi bằng thuật ngữ Realtime web: Web thời gian thực (real time web) là một tập hợp các công nghệ (technologies) và thực tiễn (practices) cho phép ngƣời dùng đầu cuối nhận đƣợc thông tin ngay sau khi nó đƣợc xuất bản bởi tác giả của nó, chứ không phải là đòi hỏi rằng họ hoặc phần mềm của họ kiểm tra một nguồn theo định kỳ để cập nhật. Web thời gian thực (realtime web) về cơ bản là khác với tính toán thời gian thực (Realtime computing) bởi vì không có biết khi nào, nhận đƣợc một phản ứng.
Thông tin đƣợc truyền theo cách này thƣờng là tin nhắn ngắn (short message), cập nhật trạng thái (status update), cảnh báo tin tức (news alert), hoặc liên kết đến tài liệu dài hơn (link to longer document). Nội dung manh tính "mềm" ở chỗ nó dựa trên ý kiến của ngƣời trên mạng xã hội, thái độ, suy nghĩ, và lợi ích - khác với tin tức chính luận hay sự kiện. Với Real-time web, thời gian đi vòng tín hiệu server đến client phải <=1s mới đƣợc coi là realtime và không đƣợc gây phiền nhiễu cho ngƣời dùng trong phiên kết nối (connection). Về tranh luận giữa mạng xã hội và real-time web, thì real-time web mặc định là mạng xã hội, còn ngƣợc lại thì không (WEB-r xuất hiện trƣớc Web 2.
Ví dụ thành công nhất của web thời gian thực là newsfeed của Facebook và Twitter. Cách tiếp cận này đang đƣợc thực hiện trong mạng xã hội, các trang tìm kiếm và trang tin tức, trải nghiệm giống nhƣ instant messaging. Lợi ích ban đầu là tăng sự tham gia của ngƣời sử dụng ("dòng chảy") và giảm tải máy chủ. Bắt đầu từ tháng 12/2009, Google giới thiệu tại Bảo tàng lịch sử máy tính tính năng tìm kiếm thời gian thực mới của họ.
[1] Mô hình mạng thực sự-thời gian thực ra đời vào năm 2000 tại mc2labs.com (aka Mc2labs RealTime Industries) bởi một nhà nghiên cứu độc lập ngƣời Ý. AJAX Nhắc đến Web đáp ứng tức thời thì không thể không nhắc tới Ajax (Asynchronous Javascript and XML). Mô hình xuất hiện đầu những năm 2000, mang lại trải nghiệm mới cho ngƣời dùng về môi trƣờng web. Ajax không xuất hiện từ hƣ không, nhƣng cái gì cũng có lý do của nó.