BÁO CÁO ĐỒ ÁN CƠ SỞ NGÀNH MẠNG ĐỀ TÀI Phần lập trình mạng Xây dựng game đánh bài cho phép nhiều người chơi qua mạng. Phần nguyên lý hệ điều hành Ứng dụng cơ chế multithread để giải hệ phương trình.
Trang 1ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC BÁCH KHOA KHOA CÔNG NGHỆ THÔNG TIN
Trang 2LỜI MỞ ĐẦU 2
PHẦN I LẬP TRÌNH MẠNG 3
Đề tài: Xây dựng game đánh bài sử dụng socket.io trong Nodejs 3
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT VÀ TỔNG QUAN VỀ ĐỀ TÀI 3
1 Cơ sở lý thuyết 3
2 Tổng quan về đề tài 9
CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 12
1 Phân tích chức năng 12
2 Triển khai 12
3 Đánh giá kết quả 14
CHƯƠNG 3: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 15
1 Kết luận 15
2 Hướng phát triển 15
PHẦN II NGUYÊN LÝ HỆ ĐIỀU HÀNH 16
Đề tài: Ứng dụng cơ chế multithread để giải bài toán hệ phương trình 16
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT VÀ TỔNG QUAN VỀ ĐỀ TÀI 16
1 Cơ sở lý thuyết 16
2 Tổng quan về đề tài 20
CHƯƠNG 2: PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 21
1 Phân tích bài toán và xây dựng thuật toán 21
2 Triển khai 23
3 Đánh giá kết quả 23
CHƯƠNG 3: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 24
1 Kết luận 24
2 Hướng phát triển 24
Trang 3LỜI MỞ ĐẦU
Nguyên lý hệ điều hành và Lập trình mạng là những kiến thức căn bản và lànền tảng mà mỗi lập trình viên phải hiểu rõ để phục vụ cho những kiến thức cao hơn
Về phần lập trình mạng, ngày nay khi nói đến phát triển các ứng dụng phần mềm,
đa số là người ta muốn nói đến chương trình có khả năng làm việc trong môi trườngmạng tích hợp nói chung và mạng máy tính nói riêng Từ các chương trình kế toán doanhnghiệp, quản lý, trò chơi, điều khiển đều là các chương trình ứng dụng mạng Vì vậy,không thể phủ nhận rằng mạng có vai trò cực kỳ quan trọng đối với mỗi người và càngquan trọng hơn trong thời đại công nghệ càng ngày càng phát triển
Hệ điều hành cũng quan trọng không kém, nếu mạng dùng để phát triển các ứngdụng phần mềm được kết nối tới máy tính thì hệ điều hành được xem là thành phần trunggian hay là cầu nối cho sự giao tiếp của người sử dụng và máy tính Thông qua hệ điềuhành, người sử dụng dễ dàng làm việc và khai thác hiệu quả thiết bị phần cứng máy tính,quản lý phần mềm ứng dụng Người sử dụng chỉ cần thao tác các lệnh, các sự kiện và chờcác tiến trình của hệ điều hành thực hiện
Dựa trên những hiểu biết của mình và tìm hiểu tài liệu, em đã nghiên cứu và thựchiện hai đề tài: xây dựng game đánh bài cho phép nhiều người chơi qua mạng (phần lậptrình mạng) và ứng dụng cơ chế MultiThread để giải bài toán hệ phương trình
Em xin chân thành cảm ơn thầy cô khoa Công Nghệ Thông Tin đã tạo điều kiện để
em nghiên cứu những kiến thức này, đặc biệt là thầy Nguyễn Tấn Khôi đã nhiệt tình theodõi, hướng dẫn em trong quá trình thực hiện đề tài này
Vì kiến thức và khả năng tìm hiểu còn hạn chế nên không thể tránh khỏi sai sóttrong quá trình thực hiện các đề tài, em rất mong nhận được sự góp ý của các thầy cô để
có được kết quả hoàn thiện hơn
Trang 4PHẦN I LẬP TRÌNH MẠNG
Đề tài: Xây dựng game đánh bài sử dụng socket.io trong Nodejs
CHƯƠNG 1 CƠ SỞ LÝ THUYẾT VÀ TỔNG QUAN VỀ ĐỀ TÀI
1 Cơ sở lý thuyết
1.1: Khái niệm lập trình mạng.
Ngày nay khi nói đến phát triển các ứng dụng phần mềm, đa số là người tamuốn nói đến chương trình có khả năng làm việc trong môi trường mạng tích hợpnói chung và mạng máy tính nói riêng Từ các chương trình kế toán doanh nghiệp,quản lý, trò chơi, điều khiển đều là các chương trình ứng dụng mạng
Vấn đề lập trình mạng liên quan đến nhiều lĩnh vực kiến thức khác nhau Từkiến thức sử dụng ngôn ngữ lập trình, phân tích thiết kế hệ thống, kiến thức hệthống mạng, mô hình xây dựng chương trình ứng dụng mạng, kiến thức về cơ sở dữliệu cho đến kiến thức truyền thông, các kiến thức các lĩnh vực liên quan khác nhưmạng điện thoại di động, PSTN, hệ thống GPS, các mạng như BlueTooth, WUSB,mạng sensor Nhưng có thể nói vấn đề lập trình mạng có 3 vấn đề chính cốt lõitích hợp trong lập trình ứng dụng mạng và được thể hiện như hình dưới
Trang 5Hay nói cách khác, vấn đề lập trình mạng có thể được định nghĩa với công thứcsau:
và không quan tâm đến vấn đề bảo mật Phần mềm mạng peer–to–peerđược thiết kế sao cho các thực thể ngang hàng thực hiện cùng các chứcnăng tương tự nhau
● Mô hình mạng khách chủ (Client-Server): trong mô hình mạng máy chủ
có một hệ thống máy tính cung cấp các tài nguyên và dịch vụ cho cả hệthống mạng gọi là các máy chủ (Server) Một hệ thống máy tính sử dụngtài nguyên và dịch vụ này được gọi là máy khác (Client)
Trang 6Nguyên lý hoạt động của mô hình Client-Server
● Việc giao tiếp giữa Client và Server phải dựa trên các giao thức chuẩnMột số giao thức được sử dụng phổ biến hiện nay như: TCP/IP, UDP,OSI…
● Mô hình này gồm hai thành phần chính: Client và Server
Client: là nơi gửi các yêu cầu xử lý về máy chủ và tổ chức giao tiếp với người dùng, với môi trường bên ngoài cũng như với Server Sau khi tiếp nhận yêu cầu người dùng, phần phía Client gửi về phía Server.
Server:máy chủ xử lý và gửi kết quả về cho Client Phần phía Server quản lý giao tiếp với môi trường bên ngoài tại Server và với các Client Sau khi phân tích yêu cầu Client gửi đến, phía Server sẽ xử
lý và gửi trả kết quả về phía Client.
Ưu điểm của mô hình Client-Server:
● Với mô hình Client-Server, bạn có thể điều khiển cả tập trung lẫn khôngtập trung các tài nguyên và bảo mật dữ liệu có thể được điều khiển quamột số máy chuyên dụng Phân quyền truy cập tài nguyên, directoryserver, domain controller
● Client-Server chống quá tải mạng
● Bạn có thể được đảm bảo toàn vẹn dữ liệu trong trường hợp có sự cố xảy
ra do tập trung quản lý ở Server
● Tiết kiệm chi phí phát triển các hệ thống ứng dụng phần mềm triển khaitrên mạng
● Có thể mở rộng (thay đổi) phạm vi mạng dễ dàng
● Cung cấp một nền tảng lý tưởng cho phép tích hợp các kỹ thuật hiện đạinhư mô hình thiết kế hướng đối tượng, hệ chuyên gia, hệ thông tin địa lý(GIS)
Trang 7● Người dùng có thể truy cập dữ liệu từ xa để thao tác như gửi và nhậnfile, tìm kiếm thông tin.
Hạn chế của mô hình Client-Server:
● Đòi hỏi quá trình bảo trì, bảo dưỡng Server
● Do nguyên lý làm việc phải trao đổi dữ liệu giữa hai máy ở hai khu vựcđịa lý khác nhau, mô hình Client-Server dễ dàng xảy ra hiện tượng thôngtin truyền trên mạng bị lộ Tính an toàn và bảo mật thông tin trên mạng
là hạn chế mà mô hình Client-Server cần khắc phục
1.4: Ngôn ngữ lập trình mạng.
Nói chung tất cả các ngôn ngữ lập trình đều có thể sử dụng để lập trình mạng.Nhưng mỗi ngôn ngữ có những ưu, nhược điểm khác nhau và được hỗ trợ thư việnAPI ở các mức độ khác nhau Tuỳ từng ứng dụng mạng cụ thể, hệ điều hành mạng
cụ thể và thói quen lập trình mà người lập trình có thể chọn ngôn ngữ phù hợp đểphát triển các ứng dụng mạng Các ngôn ngữ lập trình phổ biến hiện nay gồmnhững ngôn ngữ sau:
1.5: Giao thức TCP/IP
Giao thức TCP (Transmission Control Protocol - Giao thức điều khiển truyềnnhận) là giao thức hướng kết nối (connection-oriented), nó đòi hỏi thiết lập kết nốitrước khi bắt đầu gửi dữ liệu và kết thúc kết nối khi việc gửi dữ liệu hoàn tất theođúng thứ tự: thiết lập kết nối, truyền dữ liệu và kết thúc kết nối
IP (Internet Protocol - Giao thức liên mạng) là địa chỉ của một máy tính trênmạng, dựa vào địa chỉ IP giao thức TCP có thể truyền dữ liệu chính xác từ một máynày qua máy kia thông qua hệ thống mạng Ở trên mạng, một máy tính sẽ có mộtđịa chỉ IP khác nhau, từ địa chỉ IP có thể biết được máy nào trên mạng và ngược lại
Trang 8TCP/ IP là một bộ giao thức trao đổi thông tin được sử dụng để truyền tải vàkết nối các thiết bị trong mạng Internet TCP/IP được phát triển để mạng được tincậy hơn cùng với khả năng phục hồi tự động.
Cách thức hoạt động của mô hình TCP/IP: Phân tích từ tên gọi, TCP/IP là sựkết hợp giữa 2 giao thức Trong đó IP (Giao thức liên mạng) cho phép các gói tinđược gửi đến đích đã định sẵn, bằng cách thêm các thông tin dẫn đường vào các góitin để các gói tin được đến đúng đích đã định sẵn ban đầu Và giao thức TCP (Giaothức truyền vận) đóng vai trò kiểm tra và đảm bảo sự an toàn cho mỗi gói tin khi điqua mỗi trạm Trong quá trình này, nếu giao thức TCP nhận thấy gói tin bị lỗi, mộttín hiệu sẽ được truyền đi và yêu cầu hệ thống gửi lại một gói tin khác
1.6: Socket, giao thức Websocket
1.6.1: Tổng quan về socket.
Socket là một điểm cuối (endpoint) của liên kết truyền thông hai chiều(two-way communication) giữa hai chương trình chạy trên mạng Các lớpSocket được sử dụng để biểu diễn kết nối giữa client và server, được ràngbuộc với một cổng port (thể hiện là một con số cụ thể) để các tầng TCP (TCPLayer) có thể định danh ứng dụng mà dữ liệu sẽ được gửi tới
Lập trình socket là lập trình cho phép người dùng kết nối các máy tínhtruyền tải và nhận dữ liệu từ máy tính thông qua mạng
Hiểu đơn giản, socket là thiết bị truyền thông hai chiều gửi và nhận dữ liệu
từ máy khác
Socket hoạt động như thế nào ?
● Là một giao diện lập trình ứng dụng mạng, socket giúp các bạn lập trìnhkết nối các ứng dụng để truyền và nhận giữ liệu trong môi trường có kếtnối Internet bằng cách sử dụng phương thức TCP/IP và UDP
● Khi cần trao đổi dữ liệu cho nhau thì 2 ứng dụng cần phải biết thông tintối thiểu là IP và số hiệu cổng của ứng dụng kia
Trang 9Không giống với giao thức HTTP là cần client chủ động gửi yêu cầu choserver, client sẽ chờ đợi để nhận được dữ liệu từ máy chủ Hay nói cách khácvới giao thức Websocket thì server có thể chủ động gửi thông tin đến client
mà không cần phải có yêu cầu từ client
Tất cả dữ liệu giao tiếp giữa client-server sẽ được gửi trực tiếp qua một kếtnối cố định làm cho thông tin được gửi đi nhanh chóng và liên tục khi cầnthiết WebSocket làm giảm độ trễ bởi vì một khi kết nối WebSocket đượcthành lập, server không cần phải chờ đợi cho một yêu cầu từ client
Tương tự như vậy, client có thể gửi tin nhắn đến server bất cứ lúc nào Yêucầu duy nhất này giúp làm giảm đáng kể độ trễ, mà sẽ gửi một yêu cầu trongkhoảng thời gian, cho dù thông điệp có sẵn
Để có thể sử dụng được Websocket thì không phải chỉ cần trình duyệt hỗtrợ mà còn phải có server Websocket, server Websocket có thể được tạo rabằng bất kỳ ngôn ngữ server-side nào, nhưng Node.js được sử dụng rộng rãihơn cả vì nó viết bằng Javascript nên mang nhiều ưu điểm so với các ngônngữ server-side truyền thống khác
Hoạt động của giao thức Websocket:
Giao thức có hai phần: Bắt tay và truyền dữ liệu Ban đầu client sẽ gửi yêucầu khởi tạo kết nối Websocket đến server, server kiểm tra và gửi trả kết quả
Trang 10chấp nhận kết nối, sau đó kết nối được tạo và quá trình gửi dữ liệu có thể đượcthực hiện, dữ liệu chính là các Ws frame.
Ưu điểm của Websocket:
● WebSockets cung cấp khả năng giao tiếp hai chiều mạnh mẽ, có độ trễthấp và dễ xử lý lỗi
● API cũng rất dễ sử dụng trực tiếp mà không cần bất kỳ các tầng bổ sungnào, so với Comet, thường đòi hỏi một thư viện tốt để xử lý kết nối lại,thời gian chờ timeout, các Ajax request (yêu cầu Ajax), các tin báo nhận
và các dạng truyền tải tùy chọn khác nhau (Ajax long-polling và jsonppolling)
● Không cần phải có nhiều kết nối như phương pháp Comet long-polling.Nhược điểm của Websocket:
● Là một đặc tả mới của HTML5, WebSocket vẫn chưa được tất cả cáctrình duyệt hỗ trợ
● Do WebSocket là một TCP socket chứ không phải là HTTP request, nênkhông dễ sử dụng các dịch vụ có phạm vi yêu cầu, như Session In ViewFilter của Hibernate
2 Tổng quan về đề tài
2.1: Tìm hiểu về game đánh bài
Đề tài em nghiên cứu không phải game đánh bài tiến lên phổ biến hiện nay, vì
nó đã có quá nhiều ứng dụng trong thực tế Còn ứng dụng của em đơn giản hơn, nó
là "bản nâng cấp" của trò chơi "kéo-búa-bao" mà ai cũng đã từng chơi hơn một lần.Tuy nhiên, game đánh bài này có sự khác biệt, đó là "kéo-búa-bao" sẽ đượcthay thế bằng các năng lượng "lửa-nước-băng", tức là lửa sẽ khắc chế băng tan,nước sẽ khắc chế lửa và băng sẽ khắc chế nước Và mỗi quân bài sẽ có một nănglượng (hoặc lửa, hoặc nước, hoặc băng) cùng với một số ngẫu nhiên từ 1 đến 9.Ngoài ra mỗi lá bài sẽ có một màu trong các màu vàng, cam, xanh lá cây, xanhdương, đỏ, tím
Hai người sẽ đánh lần lượt các lá bài ra, lá nào có năng lượng khắc chế đượcnăng lượng kia thì người đó thắng Nếu 2 lá bài đưa ra cùng năng lượng thì sẽ sosánh số trên 2 lá bài, lá nào có số lớn hơn thì người đó thắng Nếu 2 lá có cùng nănglượng và cùng số thì 2 người coi như hòa Người thắng nhờ lá bài nào thì sẽ giữ lábài đó để góp phần tiến tới chiến thắng chung cuộc, người thua thì bỏ lá bài đã thua
Để có được chiến thắng chung cuộc, mỗi người cần phải có những lá bài đã chiến thắng từ các ván đơn trước đó, những lá bài đó phải thỏa mãn tiêu chí: hoặc là
Trang 11có số đủ bài của cả 3 năng lượng, hoặc là có đủ số bài chứa đủ 3 màu của một năng lượng bất kỳ (lửa, băng hoặc nước).
2.2: Xây dựng ứng dụng bằng Node.js và socket.io
2.2.1: Tổng quan về Node.js
Node.js là một mã nguồn được xây dựng dựa trên nền tảng Javascript V8Engine, nó được sử dụng để xây dựng các ứng dụng web như các trang videoclip, các forum và đặc biệt là trang mạng xã hội phạm vi hẹp Node.js là một
mã nguồn mở được sử dụng rộng bởi hàng ngàn lập trình viên trên toàn thếgiới Node.js có thể chạy trên nhiều nền tảng hệ điều hành khác nhau từWIndow cho tới Linux, OS X nên đó cũng là một lợi thế Node.js cung cấpcác thư viện phong phú ở dạng Javascript Module khác nhau giúp đơn giảnhóa việc lập trình và giảm thời gian ở mức thấp nhất
Những đặc điểm nổi bật của Node.js:
● Không đồng bộ: Tất cả các API của Nodejs đều không đồng bộ blocking), nó chủ yếu dựa trên nền của Nodejs Server và chờ đợi Servertrả dữ liệu về Việc di chuyển máy chủ đến các API tiếp theo sau khi gọi
(none-và cơ chế thông báo các sự kiện của Node.js giúp máy chủ để có đượcmột phản ứng từ các cuộc gọi API trước (real-time)
● Chạy rất nhanh: Nodejs được xây dựng dựa vào nền tảng V8 JavascriptEngine nên việc thực thi chương trình rất nhanh
● Đơn luồng: Nodejs sử dụng một mô hình luồng duy nhất Thread) Điều này giúp hệ thống tốn ít RAM nhất và chạy nhanh nhất khikhông phải tạo thread mới cho mỗi truy vấn như Java hay PHP Ngoài ra,tận dụng ưu điểm non-blocking I/O của Javascript mà Node.js tận dụngtối đa tài nguyên của server mà không tạo ra độ trễ như PHP
(Single-● Đặc biệt Node.js rất hiệu quả khi xây dựng những ứng dụng thời gianthực (real-time applications) như ứng dụng chat, các dịch vụ mạng xã hộinhư Facebook, Twitter,… cũng như những game có tính tương tác giữangười với người cao như caro, đánh bài,
2.2.2: Thư viện Socket.io trong Node.js
Nodejs là được xây dựng thuần túy bằng javascript Đây là một điểm lợi thếcủa Nodejs để lập trình web-socket:
● Thứ nhất: javascript là ngôn ngữ lập trình hướng sự kiện, mà trong lập trình thời gian thực, cách tiếp cận bằng lập trình sự kiện là cách tiếp cận khôn ngoan nhất
Trang 12● Thứ hai: Nodejs chạy non-blocking nên việc hệ thống không phải tạm ngừng để xử lý xong một request sẽ giúp cho server trả lời client gần nhưngay tức thì.
● Thứ ba: Lập trình socket yêu cầu bạn phải xây dựng được mô hình lắng nghe - trả lời từ cả 2 bên Nói cách khác đi, vai trò của client và server phải tương đương nhau, mà client thì chạy bằng javascript, nên nếu server cũng chạy bằng javascript nữa thì việc lập trình sẽ dễ dàng và thânthiện hơn
Chính vì những đặc điểm này, socket.io ra đời
Socket.io là một bộ thư viện dành cho ứng dụng web, mobile để phát triển các ứng dụng realtime Với đặc trưng mạnh mẽ và dễ sử dụng, socket.io đang ngày càng được sử dụng rộng rãi từ những trang mạng xã hội cần sự tương táccao, đến các blog hay các trang web thương mại điện tử Với bộ thư viện này, làm việc với Websocket trở nên đơn giản hơn rất nhiều Thư viện gồm 2 phần
● Phía Client: gồm bộ thư viện viết cho web (javascript), ios, android
● Phía Server: viết bằng javascript và dùng cho các máy chủ node.js
Socket.io hỗ trợ sử dụng rất nhiều các công nghệ realtime:
● Khởi tạo kết nối
● Lắng nghe event
● Gửi event
Riêng ở server thì sẽ không có phần khởi tạo kết nối vì chỉ có client mới cần khởi tạo kết nối đến server
Chính vì những ưu điểm và sự phổ biến của socket.io khi lập trình mạng,
em sẽ sử dụng thư viện này để lập trình cho đề tài của em, kết hợp với nền