1. Trang chủ
  2. » Giáo Dục - Đào Tạo

PHÁT TRIỂN HỆ THỐNG TRÒ CHƠI TRÊN ĐIỆN THOẠI DI ĐỘNG DỰA TRÊN NỀN TẢNG CÔNG NGHỆ J2ME, KẾT HỢP XÂY DỰNG WEBSITE

163 141 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 163
Dung lượng 10,15 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Các máy tính được sử dụng để chạy cáctiến trình client/server có nhiều kiểu khác nhau và không cần thiết phải phân biệt giữachúng, cả tiến trình client và tiến trình server đều có thể ch

Trang 1

KHOA CÔNG NGHỆ THÔNG TIN

Tel (84-511) 3736 949, Fax (84-511) 842 771Website: itf.dut.edu.vn, E-mail: cntt@edu.ud.vn

LUẬN VĂN TỐT NGHIỆP KỸ SƯ

NGÀNH CÔNG NGHỆ THÔNG TIN

MÃ NGÀNH : 05115

ĐỀ TÀI:

PHÁT TRIỂN HỆ THỐNG TRÒ CHƠI TRÊN ĐIỆN THOẠI

DI ĐỘNG DỰA TRÊN NỀN TẢNG CÔNG NGHỆ J2ME,

KẾT HỢP XÂY DỰNG WEBSITE

Mã số: 06T3-014

06T3-021 06T3-040 06T2-026 Ngày bảo vệ: 15-16/06/2011

SINH VIÊN : Bùi Vũ Nhật Hoàng 06T3

Phan Linh 06T3

Lê Khắc Thọ 06T3 Nguyễn Thị Hồng Phúc 06T2 CBHD : ThS Lâm Tùng Giang

ĐÀ NẴNG, 06/2011

Trang 2

Lời đầu tiên chúng em muốn nói, chúng em xin chân thành cảm ơn các thầy cô trong khoa Công nghệ thông tin cũng như các thầy cô giảng dạy trong trường Đại học Bách khoa, Đại học Đà Nẵng đã truyền đạt những kiến thức quý báu chochúng em trong những năm học vừa qua.

Đặc biệt, chúng em xin chân thành cảm ơn anh Lâm Tùng Giang- Phó Giám đốc Trung tâm tin học Văn phòng UBND Thành phố Đà Nẵng đã tận tình hướng dẫn, động viên và giúp đỡ em trong suốt thời gian thực hiện đề tài.

Cuối cùng chúng em xin cảm ơn các bạn trong khoa Công Nghệ Thông Tin, những người đã giúp đỡ, chia sẽ những kiến thức, kinh nghiệm, tài liệu…trong suốt quá trình nghiên cứu thực hiện đề tài.

Một lần nữa, chúng em xin chân thành cảm ơn!

Đà Nẵng, ngày 5 tháng 6 năm 2011 Nhóm sinh viên,

Bùi Vũ Nhật Hoàng 06T3 Phan Linh

Lê Khắc Thọ

06T3 06T3 Nguyễn Thị Hồng Phúc 06T2

Trang 3

Chúng em xin cam đoan :

1 Những nội dung trong luận văn này là do chúng em thực hiện dưới sự hướng dẫn trực tiếp của anh Lâm Tùng Giang.

2 Mọi tham khảo dùng trong luận văn đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố.

3 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, chúng em xin chịu hoàn toàn trách nhiệm.

Nhóm sinh viên, Bùi Vũ Nhật Hoàng 06T3 Phan Linh

Lê Khắc Thọ

06T3 06T3 Nguyễn Thị Hồng Phúc 06T2

Trang 4

Đà Nẵng, ngày … tháng … năm 2011

Cán bộ hướng dẫn

Th.s Lâm Tùng Giang

Trang 5

Đà Nẵng, ngày … tháng … năm 2011 Hội Đồng bảo vệ

Trang 6

I Giới thiệu đề tài 2

II Mục đích, ý nghĩa của đề tài 2

II.1 Mục đích 2

II.2 Ý nghĩa 3

III Phương pháp triển khai đề tài 3

III.1 Các bước thực hiện 3

III.2 Dự kiến kết quả đạt được 4

CƠ SỞ LÝ THUYẾT VÀ THUẬT TOÁN 5

I Mô hình Client/Server6

II Giao thức điều khiển truyền dữ liệu TCP 8

III Giới thiệu về Socket 10

IV Tìm hiểu về Thread và MultiThread 12

IV.1 Tuyến đoạn 12

IV.2 Đa tuyến đoạn(MultiThread) 14

IV.3 Thiết lập các tuyến đoạn 15

IV.4 Thứ tự ưu tiên tuyến đoạn 18

IV.5 Cơ chế đồng bộ hóa 19

V Giới thiệu chung về ASP.NET 21

V.1 Tìm hiểu về Net Platform 21

V.2 Tìm hiểu về Net Framework 22

V.3 Tìm hiểu về ASP.Net 26

V.4 Quá trình xử lý tập tin ASPX 27

V.5 Phân loại tập tin trong ASP.Net 28

V.6 Những ưu điểm của ASP.Net 28

VI SQL Server 2005 30

VI.1 Giới thiệu chung về SQL Server 30

VI.2 Các ấn bản của SQL Server 30

VI.3 Các thành phần của SQL Server 31

VI.4 Mô hình hoạt động của SQL server trên mạng máy tính 33VII Máy ảo java cho các điện thoại di động 36

VIII Lập trình java cho Mobile 37

VIII.1 Ngôn ngữ java 37

VIII.2 So sánh công nghệ Java và Microsoft.Net 38

VIII.3 Giới thiệu về J2ME 39

IX J2ME game API 46

IX.1 Layer class 46

IX.2 Sprite Class 47

IX.3 TiledLayer class 48

IX.4 LayerManager class 49

X Giới thiệu về thuật toán 50

X.1 Dạng trò chơi 50

X.2 Cây trò chơi 51

Trang 7

II.1 Đặc tả yêu cầu người sử dụng68

II.2 Phân tích cấu trúc chương trình 69

II.3 Xác định các tác nhân(actors) 77

II.4 Xây dựng sơ đồ Use Case 78

II.5 Xây dựng sơ đồ tuần tự 86

IV.1 Đặc tả tổng quan hệ thống website 101

IV.2 Xây dựng sơ đồ Use Case của hệ thống website 103IV.3 Xây dựng sơ đồ tuần tự 106

IV.4 Xây dựng sơ đồ hoạt động 112

IV.5 Sơ đồ Lớp 116

IV.6 Thiết kế cơ sở dữ liệu 119

TRIỂN KHAI CHƯƠNG TRÌNH 126

II.1 Ưu điểm 148

II.2 Nhược điểm 149

III Hướng phát triển 150

Trang 8

Hình 1: Mô hình client-server 7

Hình 2: Kết nối 2 chiều 9

Hình 3: Một phiên kết nối socket 10

Hình 4: Mối quan hệ giữa một thread và một chương trình 12

Hình 5: Chu trình sống của một tuyến đoạn 13

Hình 6 Các loại hình dịch vụ 21

Hình 7: Kiến trúc Net Framework 22

Hình 8: Hệ thống tên miền (Namespace) 25

Hình 9: Quá trình xử lý tập tin ASPX 27

Hình 10: Cơ chế hoạt động của ASP.Net 29

Hình 11: Các thành phần của SQL Server 31

Hình 12: SQL Server tools 32

Hình 13: Mô hình chung SQL Server trên mạng 33

Hình 14: Mô hình SQL trên Desktop 34

Hình 15: Mô hình Client/Server 34

Hình 16: Chi tiết mô hình Client/Server 35

Hình 17: Mô hình kết nối ứng dụng trên mạng Internet 36

Hình 18: Biểu diễn tiến trình xây dựng ứng dụng MIDlet hoàn chỉnh và vai trò của KVM 37

Hình 19: Quá trính phát triển của Java 38

Hình 20: So sánh Java và Net 38

Hình 21: Kiến trúc của J2ME 39

Hình 22: Một số mẫu điện thoại 41

Hình 23: Ví dụ MIDLet 42

Hình 24: Chu kì sống của các ứng dụng MIDlet 43

Hình 25: Quản lý màn hình của ĐTDĐ 44

Hình 26: Đồ họa mức cao 44

Hình 27: Canvas và Graphics 45

Hình 28: Sprite 47

Hình 29: TiledLayer 49

Hình 30: Một số trò chơi đối kháng (trò chơi Minimax) 51

Hình 31: Cây trò chơi 52

Hình 32: Cây tìm kiếm và sự bùng nổ tổ hợp 53

Hình 33: Ví dụ một phần cây trò chơi 54

Hình 34: Thuật toán Minimax 54

Hình 35: Thuật toán AlphaBeta 60

Hình 36: Sơ đồ tổng quan hệ thống 63

Hình 37: Sơ đồ Use Case hệ thống 68

Hình 38: Sơ đồ cấu trúc trò chơi 70

Hình 39: Giao diện GAPS flatform 71

Hình 40: GASP Log On 72

Hình 41: Lobby Room 72

Hình 42: Waiting Room 73

Hình 43: In Game 73

Hình 44: quan hệ giữa các lớp 76

Trang 9

Hình 48: Sơ đồ Use Case tổng quan trong chế độ chơi offline 81

Hình 49: Sơ đồ Use Case mô tả hoạt động Player trong chế độ chơi online 82

Hình 50: Sơ đồ Use Case hoạt động của Server trong chế độ chơi online 83

Hình 51: Sơ đồ Use Case hoạt động của Board trong chế độ chơi online 84

Hình 52: Sơ đồ Use Case tổng quan trong chế độ chơi online 85

Hình 53: Sơ đồ biểu diễn quá trình làm việc của hệ thống trong chế độ chơi offline 86

Hình 54: Sơ đồ biểu diễn quá trình làm việc của hệ thống chế độ chơi online 87

Hình 55: Mô hình tổng thể phần server 88

Hình 56: Sơ đồ quản lý đăng nhập của người chơi vào hệ thống 88

Hình 57: Sơ đồ quản lý ván cờ 89

Hình 58: Quản lý các session 89

Hình 59: Sơ đồ ca sử dụng tổng quát của hệ thống server 92

Hình 60: Use case quản lý đăng nhập người chơi 92

Hình 61: Use case quản lý việc xem ván cờ 93

Hình 62: BDTT xử lý các hành động ở màn hình đăng nhập hệ thống 94

Hình 63: BDTT xử lý các hành động lấy thông tin session từ hệ thống 95

Hình 64: BDTT xử lý hành động kết nối vào một session 96

Hình 65: BDTT xử lý việc chờ kết nối từ người chơi khác kết nối vào session 97

Hình 66: BDTT xử lý trạng thái chơi game 98

Hình 67: BDTT xử lý xem thông tin ván cờ trên web 99

Hình 68: Sơ đồ lớp Server 100

Hình 69: Mô hình tổng quan của hệ thống 102

Hình 70: Sơ đồ Use case cho khách 103

Hình 71: Sơ đồ Use case cho người dùng 104

Hình 72: Sơ đồ Use case cho Admin 105

Hình 73: Sơ đồ tuần tự đăng nhập 106

Hình 74: Sơ đồ tuần tự download Game 107

Hình 75: Sơ đồ tuần tìm kiếm 108

Hình 76: Sơ đồ tuần bình luận 109

Hình 77: Sơ đồ tuần quản lý chung 110

Hình 78: Sơ đồ hoạt động đăng nhập 112

Hình 79: Sơ đồ hoạt động download 113

Hình 80: Sơ đồ hoạt động bình luận 114

Hình 81: Sơ đồ hoạt động quản lý chung 115

Hình 82: Sơ đồ lớp tầng BOL 116

Hình 83:Sơ đồ lớp tầng DAL 117

Hình 84: Sơ đồ lớp tầng BAL 118

Hình 85 Sơ đồ quan hệ thực thể 125

Hình 86: Game start 126

Hình 87: Chọn chế độ âm thanh 127

Hình 88: Menu chính 127

Hình 89: Chế độ chơi offline 128

Hình 90: Play game 128

Hình 91: Login 129

Hình 92: Chọn phòng chơi 129

Hình 93: Bắt đầu chơi game 130

Trang 10

Hình 97: Giao diện chơi game ở chế độ offline 134

Hình 98: Giao diện help 135

Hình 99: Server đáp ứng việc login và lấy thông tin session 136

Hình 100: Server đáp ứng việc kết nối vào session 137

Hình 101: Server xử lý quá trình kết thúc game 138

Hình 102: Màn hình trang chủ 139

Hình 103: Màn hình trang đăng kí 140

Hình 104: Màn hình trang bình luận cho Game 141

Hình 105: Mạn hình trang bầu chọn cho Game 142

Hình 106: Xem danh sách Game theo danh mục 143

Hình 107: Màn hình trang liên hệ 143

Hình 108: Màn hình trang cập nhật thông tin cá nhân 144

Hình 109: Màn hình trang thay đổi mật khẩu 144

Hình 110: Màn hình trang quản lý Game 145

Hình 111: Thêm một Game mới (bước 1) 146

Hình 112: Thêm một Game mới (bước 2) 147

Trang 11

Bảng 1: Phân loại tập tin trong ASP.NET 28

Bảng 2: Xác định các tác nhân của hệ thống 64

Bảng 3: Các ca sử dụng của Client 66

Bảng 4: Các ca sử dụng của Server 66

Bảng 5: Xác định các ca sử dụng Website 67

Bảng 6: Xác định các tác nhân 90

Bảng 7: Xác định các ca sử dụng Server 91

Bảng 8: Role 119

Bảng 9: Account 120

Bảng 10: Brand 120

Bảng 11: Model 121

Bảng 12: Categories 121

Bảng 13: Comment 121

Bảng 14: Rating 122

Bảng 15: Feedback 122

Bảng 16: JoinGame 122

Bảng 17: Score 123

Bảng 18: Level 123

Bảng 19: SaveBoard 123

Bảng 20: Games 124

Trang 13

I Giới thiệu đề tài

Ngày nay, sự phát triển về nhu cầu sở hữu các thiết bị kỹ thuật số mà trong đó thiết

bị di động có thị phần khá lớn Sự đòi hỏi về mẫu mã, chất lượng dịch vụ mà đặc biệt

là tính năng của chiếc điện thoại, các phần mềm tiện ích đi kèm đã kéo theo sự pháttriển của các hệ điều hành để các nhà phát triển ứng dụng có thể thực hiện các ý tưởngcủa mình Các hệ điều hành phổ biến đó như: Windows Mobile, Linux Mobile,Symbian

Cùng với tốc độ phát triển đó là những tiến bộ vượt bậc về tốc độ xử lý Nhờ đó lậptrình các ứng dụng cho loại thiết bị này tăng lên nhanh chóng, đặc biệt là các dịch vụgiá trị gia tăng trên mạng di động như SMS, RSS, WAP và ứng dụng dịch vụ game.Qua tìm hiểu về, chúng em thấy thị trường game di động tại Việt Nam đang phát triển

và có tiềm năng lớn Vì vậy nhóm chúng em quyết định chọn đề tài “ Phát triển hệ

thống trò chơi trên điện thoại di động dựa trên nền tảng công nghệ J2ME, kết hợp xây dựng Website”.

Hệ thống được xây dựng với các thành phần sau:

- Chương trình client chạy trên mobile bao gồm 2 trò chơi: cờ tướng và cờ Caro.Với chương trình này người chơi có thể có thể chơi ở chế độ offline hay giao lưu họchỏi ở những người chơi khác thông qua chế độ online được kết nối thông qua server

năng quản lý việc đăng nhập của người chơi, quản lý kết nối vào các phòng chơi trênserver, quản lý việc trao đổi thông tin giữa 2 người chơi, quản lý ván cờ đã lưu trên hệthống

download, bình luận, bầu chọn cho Game, quản lý đăng nhập và đăng ký, quản lýthông tin cá nhân, thay đổi hoặc khôi phục mật khấu, xem điểm của các trò chơi đãtừng tham gia Đối với quản trị viên thì ngoài các chức năng của người dùng còn cóthể quản lý Game, upload Game, quản lý người dùng, quản lý các danh mục, quản lýđiểm của người chơi…

II Mục đích, ý nghĩa của đề tài

Trang 14

quảng bá game, cung cấp thông tin cũng như cho phép người dùng download game vềmáy.

Cố gắng phát triển ứng dụng có tính chất thực tiễn cao, có khả năng thu hút ngườidùng nếu có cơ hội triển khai thực tế

Nhằm tạo ra những sản phẩm game trí tuệ phục vụ cho nhiều đối tượng người dùng

ở mọi lứa tuổi

Thông qua phát triển hệ thống để đánh giá lại khả năng của bản thân và tổng kếtnhững kiến thức kĩ năng đã được học trong nhà trường trong những năm qua như kĩnăng làm việc nhóm, kĩ năng lập trình Đồng thời nghiên cứu tiếp thu thêm kiến thức

và kĩ năng mới : nghiên cứu thuật toán, nghiên cứu về lập trình, nghiên cứu công nghệmới …

Đặc biệt với chế độ online có thể tạo cơ hội giao lưu giữa những ngươi chơi game,tạo ra một cộng đồng những người đam mê các trò chơi trí tuệ

III Phương pháp triển khai đề tài

- Xác định nội dung cần thực hiện đối với từng module (client, server, website)

Trang 15

III.2 Dự kiến kết quả đạt được

Xây dựng được hệ thống hoàn chỉnh bao gồm:

chế độ online và offline, lưu game, lưu điểm, tùy chỉnh cấp độ chơi, tiếp tục chơigame đã lưu…

các session và các ván cờ đã chơi

Game cho người dùng, cho phép download, tìm kiếm, bình luận, bình chọn cho Gametương ứng Qua đó người dùng có thể tìm kiếm các Game hay và tương thích với điệnthoại của mình

Trang 17

tán là mô hình client/server Trong mô hình này sẽ có một tập các tiến trình mà mỗitiến trình đóng vai trò như là một trình quản lý tài nguyên cho một tập hợp các tàinguyên cho trước và một tập hợp các tiến trình client trong đó mỗi tiến trình thựchiện một tác vụ nào đó cần truy xuất tới tài nguyên phần cứng hoặc phần mềm dùngchung Bản thân các trình quản lý tài nguyên cần phải truy xuất tới các tài nguyêndùng chung được quản lý bởi một tiến trình khác, vì vậy một số tiến trình vừa là tiếntrình client vừa là tiến trình server Các tiến trình phát ra các yêu cầu tới các server bất

kỳ khi nào chúng cần truy xuất tới một trong các tài nguyên của các server Nếu yêucầu là đúng đắn thì server sẽ thực hiện hành động được yêu cầu và gửi một đáp ứngtrả lời tới tiến trình client

Mô hình client/server cung cấp một cách tiếp cận tổng quát để chia sẻ tài nguyêntrong các hệ thống phân tán Mô hình này có thể được cài đặt bằng rất nhiều môitrường phần cứng và phần mềm khác nhau Các máy tính được sử dụng để chạy cáctiến trình client/server có nhiều kiểu khác nhau và không cần thiết phải phân biệt giữachúng, cả tiến trình client và tiến trình server đều có thể chạy trên cùng một máy tính.Một tiến trình server có thể sử dụng dịch vụ của một server khác

Mô hình truyền tin client/server hướng tới việc cung cấp dịch vụ Quá trình trao đổi

dữ liệu bao gồm:

- Truyền một yêu cầu từ tiến trình client tới tiến trình server

Mô hình truyền tin này liên quan đến việc truyền hai thông điệp và một dạng đồng

bộ hóa cụ thể giữa client và server Tiến trình server phải nhận thức được thông điệpđược yêu cầu ở bước một ngay khi nó đến và hành động phát ra yêu cầu trong clientphải được tạm dừng (bị phong tỏa) và buộc tiến trình client ở trạng thái chờ cho tớ khi

nó nhận được đáp ứng do server gửi về ở bước ba

Mô hình client/server thường được cài đặt dựa trên các thao tác cơ bản là gửi (send)

và nhận (receive)

Trang 18

Hình 1: Mô hình client-server

Quá trình giao tiếp client và server có thể diễn ra theo một trong hai chế độ: bịphong tỏa (blocked) và không bị phong tỏa (non-blocked)

Chế độ bị phong tỏa (blocked):

Trong chế độ bị phong tỏa, khi tiến trình client hoặc server phát ra lệnh gửi dữ liệu(send), việc thực thi của tiến trình sẽ bị tạm ngừng cho tới khi tiến trình nhận phát ralệnh nhận dữ liệu (receive)

Tương tự đối với tiến trình nhận dữ liệu, nếu tiến trình nào đó (client hoặc server)phát ra lệnh nhận dữ liệu, mà tại thời điểm đó chưa có dữ liệu gửi tới thì việc thực thicủa tiến trình cũng sẽ bị tạm ngừng cho tới khi có dữ liệu gửi tới

Chế độ không bị phong tỏa (non-blocked):

Trong chế độ này, khi tiến trình client hay server phát ra lệnh gửi dữ liệu thực sự,việc thực thi của tiến trình vẫn được tiến hành mà không quan tâm đến việc có tiếntrình nào phát ra lệnh nhận dữ liệu đó hay không

Tương tự cho trường hợp nhận dữ liệu, khi tiến trình phát ra lệnh nhận dữ liệu, nó

sẽ nhận dữ liệu hiện có, việc thực thi của tiến trình vẫn được tiến hành mà không quantâm đến việc có tiến trình nào phát ra lệnh gửi dữ liệu tiếp theo hay không

Tiến trình đang phong

tỏa

Tiến trình đang xử lý

Request message

Request message

Reply ExecutionWait

ServerClient

Trang 19

II Giao thức điều khiển truyền dữ liệu TCP

Trong 2 giao thức ở Lớp giao vận (Transport Layer), TCP là giao thức được sửdụng nhiều nhất Đây là giao thức hướng kết nối (connection-oriented), có 5 đặc trưngcủa dịch vụ chuyển phát đáng tin cậy:

sử dụng) truyền những khối lượng lớn dữ liệu, chúng ta xem dữ liệu này là một chuỗicác bit, được chia thành các octet 8 bit, mà chúng ta thường gọi là byte Dịch vụchuyển phát stream tên máy đích chuyển đến nơi nhận một cách chính xác cùng mộtchuỗi các octet mà máy gửi chuyển đi

một cuộc gọi điện thoại Trước khi việc truyền có thể bắt đầu, cả hai chương trình ứngdụng gửi và chương trình ứng dụng nhận tương tác với hệ điều hành, thông báo vềmong muốn có được việc truyền stream Về mặt khái niệm, một chương trình ứngdụng sẽ thực hiện một "cuộc gọi" mà phải được đầu kia chấp nhận, tức thiết lập mộtkết nối – hay mạch ảo - để truyền và nhận dữ liệu một cách chính xác

qua mạch ảo bằng cách lặp lại việc chuyển các octet dữ liệu đến phần mềm giao thức.Khi truyền dữ liệu, mỗi chương trình ứng dụng sử dụng bất kỳ kích thước đơn vịtruyền nào nó thấy thuận tiện, có thể chỉ bằng một octet Tại đầu nhận, phần mềm giaothức phát chuyển tự động dữ liệu theo đúng chính xác thứ tự mà chúng được gửi đi,làm cho chúng sẵn sàng được sử dụng đối với chương trình ứng dụng nhận, ngay saukhi chúng được nhận và kiểm tra Phần mềm giao thức được tự do phân chia dòng dữliệu thành những gói dữ liệu độc lập với đơn vị mà chương trình ứng dụng truyền đi

Để làm cho việc truyền hiệu quả hơn và tối thiểu giao thông trên mạng, các cài đặtthường tập hợp cho đủ dữ liệu từ dòng dữ liệu để đặt vào datagram có độ lớn thíchhợp trước khi truyền nó qua Internet

xác định các dòng dữ liệu có cấu trúc Lấy ví dụ, chương trình trả lương nhân viên,không có cách nào để dịch vụ stream đánh dấu biên giới giữa các bản ghi nhân viên,hay để xác định nơi dừng của dòng dữ liệu là dữ liệu nhân viên Các chương trình ứngdụng sử dụng dịch vụ stream phải hiểu nội dung stream và thống nhất với nhau địnhdạng stream trước khi khởi động việc kết nối

truyền đồng thời từ cả hai chiều Cách kết nối này được gọi là song công (full deplex)

Từ quan điểm của một tiến trình ứng dụng, một kết nối hai chiều bao gồm 2 dòng dữliệu độc lập “chạy” theo hai chiều ngược nhau, và không có tương tác hay va chạm.Dịch vụ stream cho phép một tiến trình ứng dụng chấm dứt "dòng chảy" theo mộtchiều trong khi dữ liệu vẫn tiếp tục "chạy" theo chiều kia, làm cho kết nối trở thànhmột chiều (half duplex) Ưu điểm chính của kết nối hai chiều là phần mềm giao thức

cơ sở có thể gửi thông tin điều khiển cho một stream ngược trở về nguồn trong những

Trang 20

datagram đang chuyển tải dữ liệu theo chiều ngược lại Điều này làm giảm bớt giaothông trên mạng.

Hình 2: Kết nối 2 chiều

Vào đầu mỗi phiên TCP, máy tính gửi và nhận dữ liệu thực hiện thủ tục bắt tay 3bước Mỗi bước sử dụng một segment chỉ có phần đầu TCP mà không có dữ liệu Đầutiên, máy tính gửi dữ liệu gửi tới máy nhận dữ liệu một segment có các thông tin sau:

Cờ đồng bộ (đặt ở vùng Flag) được thiết lập về trạng thái bật (on), Sequence numbercho segment được gửi sau đó và giá trị của kích thước của vùng đệm dữ liệu (windowsize) của nó Kế tiếp, máy tính nhận dữ liệu sẽ hồi đáp bằng một segment với cácthông tin: cờ đồng bộ cũng ở trạng thái bật, sequence number thiết lập với giá trị củasegment nó dự định sẽ nhận từ máy tính gửi dữ liệu và kích thước vùng đệm dữ liệu.Cuối cùng, máy tính gửi dữ liệu sẽ gửi một acknowledgemnet với sequence number

mà máy tính nhận dữ liệu đã dự tính ở bước thứ hai Qua thủ tục này, 2 máy tính sẽsẵn sàng cho quá trình truyền và nhận dữ liệu Trong thủ tục bắt tay 3 bước, mỗi máytính cũng điều khiển kích thước của vùng đệm gửi dữ liệu phù hợp với kích thước củacửa vùng đệm nhận dữ liệu TCP sẽ nhận dữ liệu từ lớp ứng dụng (ApplicationLayrer) ở trên nó, chia dữ liệu thành các segment và gắn cho mỗi segment phần đầuTCP TCP chỉ gửi đi các segment vừa với kích thước vùng đệm gửi dữ liệu của nó vàkhởi động một bộ đếm (timer) cho segment được gửi Nếu bộ đếm đáo hạn (time out)

mà máy tính nhận dữ liệu vẫn chưa trả lời xác nhận, máy tính gửi dữ liệu sẽ gửi lạisegment Khi TCP nhận được acknowledgement cho segment đã gửi, só sẽ tiếp tục gửicác segment đang chờ gửi Sau khi tất cả dữ liệu đã được gửi đi và xác nhận, TCPđóng phiên làm việc hiện thời

ACK=100

Trang 21

III Giới thiệu về Socket

Một socket là một điểm kết nối truyền thông (đầu cuối) mà bạn cần 1 tên (name) vàđịa chỉ (address) trên mạng Socket có thể sử dụng trên các hệ thống giống nhau hoặccác hệ thống khác nhau trên các mạng khác nhau Socket hữu dụng cho cả ứng dụngđộc lập và ứng dụng mạng Socket cho phép bạn thay đổi thông tin giữa việc xử lý cáctrên các máy giống nhau và hai bên đầu cuối trên một mạng và cho phép truy xuất mộtcách dễ dàng tới các dữ liệu trung tâm

Socket phần lớn được sử dụng cho việc truyền thông giữa client và server Điểnhình là cấu hình server trên 1 máy và client trên 1 máy khác Client kết nối tới server,trao đổi thông tin và sau đó kết thúc việc truyền thông, chúng sẽ ngắt kết nối

Một socket có một loạt các khả năng Trong một kết nối kiểu client-to-server,socket trên server sẽ đợi xử lý các yêu cầu từ một client Để làm điều này, server đầutiên phải thiết lập một địa chỉ mà các client dựa vào đó để tìm server Khi địa chỉserver được thiết lập, server sẽ đợi cho các client gửi yêu cầu về 1 dịch vụ Dữ liệu lúc

đó sẽ được trao đổi thông qua socket Server thực hiện yêu cầu từ các client và gửiphản hồi lại cho client

Hình 3: Một phiên kết nối socket

Trang 22

Bước 1: Hàm socket() tạo một điểm kết nối (endpoint – đầu cuối) cho việc kết nối

và trả lại một ký hiệu nhận diện socket tương ứng với điểm kết nối (endpoint)

Bước 2: Khi một ứng dụng có một ký hiệu nhận diện socket, nó có thể gán 1 tênduy nhất cho socket Server phải gán 1 tên để có thể truy xuất tới mạng

Bước 3: Hàm listen() cho thấy sự sẵn sàng để chấp nhận yêu cầu kết nối từ phíaclient

Bước 4: Ứng dụng Client sử dụng hàm connect() trên một stream socket để thựchiện kết nối tới server

Bước 5: Ứng dụng server sử dụng hàm accept() để chấp nhận yêu cầu kết nối từ 1client Server phải thực hiện hàm bind() và listen() thành công trước khi nó có thểthực hiện hàm accept()

Bươc 6: Khi một kết nối được thực hiện giữa Client và Server, chúng ta có thể dùngmột số hàm truyền dữ liệu Socket API Các Client và Server có nhiều hàm truyền dữliệu để lựa chọn như send(), recv(), read(), write()

Bước 7: Khi Server hoặc Client muốn ngừng việc truyền thông, nó thực hiện hàmclose() để để giải phóng tài nguyên mà hệ thống bỏ ra cho socket

Trang 23

IV Tìm hiểu về Thread và MultiThread

IV.1.1 Khái niệm về tuyến đoạn

Nhiều người lập trình đều quen thuộc với việc viết những chương trình liên tục.Các chương trình như: hiển thị "Hello Word", sắp xếp một danh sách các tên hoặc tínhtoán một dãy các số nguyên tố Đó là những chương trình tuần tự Tức là mỗi chươngtrình đều có bắt đầu rồi đến thực thi và cuối cùng là kết thúc

Một tuyến đoạn thì tương tự như những chương trình tuần tự vừa mới được mô tả.Một tuyến đoạn đơn cũng có một sự bắt đầu, trình tự, và phần cuối Tuy nhiên, bảnthân một tuyến đoạn không phải là một chương trình, nó không thể tự ý chạy, nó chỉ

có thể chạy bên trong một chương trình

Hình 4: Mối quan hệ giữa một thread và một chương trình

Như vậy tuyến đoạn đơn là một dòng liên tục đơn điều khiển bên trong một chươngtrình

Những chương trình đơn tuyến đoạn chứa những câu lệnh mà thi hành trong mộttuần tự rất nhanh, nhưng chỉ một câu lệnh là thi hành tại một thời điểm Khi một máytính chứa một CPU, nó chỉ có thể thi hành một chỉ lệnh máy tại một thời điểm Khibạn sử dụng một máy tính với nhiều CPU, máy tính đó có thể thi hành nhiều chỉ dẫnmáy cùng lúc

a thread

a program

Trang 24

IV.1.2 Chu trình sống của một tuyến đoạn

Hình 5: Chu trình sống của một tuyến đoạn

Một tuyến đoạn có thể ở một trong các trạng thái sau:

- New: Khi một luồng mới được tạo ra với toán tử new() và sẵn sàng hoạt động

nó gọi hàm start() Bộ lập lịch phân luồng của hệ điều hành sẽ quyết định luồng nào sẽđược chuyển về trạng thái Runnable và hoạt động Cũng cần lưu ý rằng ở một thờiđiểm, một luồng ở trạng thái Runnable có thể hoặc không thể thực hiện

thực hiện (“bị chặn”) khi gọi một trong các hàm: sleep(), suspend(), wait(), hay bịchặn lại ở Input/output

thường, hoặc gặp phải ngoại lệ không thực hiện tiếp được Trong trường hợp đặc biệt,bạn có thể gọi hàm stop() để kết thúc (“giết chết”) một luồng

BlockedWaiting

resume() Suspend()

yield()

Wait() Notify() Start()

Stop()

Sleep()

Bị chặn bởi I/O

Kết thúc bởi I/O

Trang 25

IV.2 Đa tuyến đoạn(MultiThread)

IV.2.1 Đa nhiệm(Multitasking)

Khả năng máy tính chạy cùng một lúc nhiều chương trình, như là trong khi xử lývăn bản có thể nghe nhạc, đó là tính đa nhiệm

Với tính đa nhiệm thì hệ điều hành quyết định khi nào thì chuyển bộ xử lý từ ứngdụng này sang ứng dụng khác đang đợi nó Hệ điều hành chuyển bộ xử lý mà khôngcần chương trình ứng dụng cho phép

Hệ điều hành bảo vệ mỗi quá trình với tất cả các quá trình khác, lỡ khi một chươngtrình gặp sự cố, nó sẽ không làm hỏng toàn bộ máy tính

IV.2.2 Đa tuyến đoạn(multithreading)

Ngôn ngữ lập trình Java cho phép bạn bắt đầu hay khởi động nhiều tuyến đoạn màkhông có vấn đề gì liên quan đến bộ xử lý mà ban đang sử dụng Nếu bạn sử dụng hệthống máy tính mà có nhiều hơn một CPU, nhiều tuyến đoạn có thể thi hành cùng lúc Nếu bạn sử dụng một máy tính với một bộ xử lý đơn, nhiều tuyến đoạn chia sẻ thờigian của CPU CPU cấp một lượng thời gian nhỏ cho một nhiệm vụ, và cấp lượng thờigian nhỏ khác cho nhiệm vụ khác CPU chưa bao giờ thực sự thực hiện hai nhiệm vụcùng lúc Thay vào đó, nó thực hiện một chút nhiệm vụ này, sau đó nó lại thực hiệnmột chút nhiệm vụ khác CPU thực hiện quá nhanh đến nỗi mà mỗi một nhiệm vụđang thi hành dường như không bị ngắt quãng giữa chừng

Như vậy: Đa tuyến đoạn là nhiều hơn một tuyến đoạn đang chạy trong sự songsong hoặc cùng lúc

Bất cứ một chương trình ứng dụng nào cũng có ít nhất một tuyến đoạn, là Threadđầu tiên của chương trình (hoặc là Thread chính) Chúng ta có thể bắt đầu hay thêmvào cũng như kết thúc những Thread mới khi chúng ta cần, nhưng Thread chính thìgiữ tiến trình cùng lúc với chương trình ứng dụng đang chạy

Trong chế độ đa tuyến đoạn:

- Không có cơ chế bảo vệ giữa các tuyến đoạn Mỗi tuyến đoạn trong Java có thểchạy độc lập với tất cả tuyến đoạn khác trong chương trình đó, song cũng có thể giaotiếp với các tuyến đoạn khác nếu cần, mọi tuyến đoạn đều chia sẻ chung tập hợp cácđối tượng và biến

đoạn khác Ví dụ, giả sử có một tuyến đoạn thực hiện chỉ lệnh theo hướng "if " củacâu lệnh if-else, trong khi tuyến đoạn khác thi hành chỉ lệnh theo hướng " else"

Vậy làm sao JVM có thể theo dõi được sự thực thi của mỗi tuyến đoạn? JVM sẽcấp cho mỗi tuyến đoạn phương thức của nó- gọi ngăn xếp( call stack) Ngoài việc

Trang 26

theo dõi chỉ lệnh byte hiên thời, phương thức "call stacks" còn theo dõi những biến địaphương, những tham số của phương thức và giá trị trả về của phương thức đó.

IV.2.3 Tại sao phải sử dụng đa tuyến đoạn

Người dùng không thích các phần mềm không đáp ứng được yêu cầu Khi clickchuột, người dùng thường mong đợi chương trình đáp ứng ngay lập tức các yêu cầucủa họ, thậm chí khi chương trình đó đang trong một hoạt động cần nhiều thời giannhư tổ chức trang lại cho một tài liệu dài hay là đang chờ một thao tác mang hoàn tất.Những chương trình đáp ứng chậm chạp yêu cầu của người sử dụng chúng thườngtrưng ra một sự thực hiện tồi Một cách để có thể đáp ứng được nhu cầu đó là sử dụngnhiều tuyến đoạn ( multithreading)

Mutithreading giúp ích nhiều cho một chương trình:

đáp ứng được yêu cầu của người sử dụng trong khi phải thực hiện các thao tác khácnhư tổ chức lại trang hay in một tài liệu

những chương trình giống hệt nhưng không sử dụng đa tuyến đoạn Điều này đặc biệtđúng trong việc chạy nhiều tuyến đoạn trên một máy có nhiều bộ xử lý, ở đó mỗituyến đoạn có bộ xử lý riêng

dùng, ngoài ra nó còn có giao diện thân thiện hơn

Java thực hiện tuyến đoạn thông qua lớp java.lang.Thread

IV.3.1 Thiết lập tuyến đoạn thừa kế từ lớp Thread:

Lớp java.lang.Thread cung cấp các phương thức để khởi động (start()), tạm dừng(suspend()), phục hồi (resume()) và dừng hẳn (stop()) một tuyến đoạn, cũng như kiểmsoát các khía cạnh khác như độ ưu tiên của tuyến đoạn hoặc tên của tuyến đoạn gắnvới nó Cách đơn giản nhất để sử dụng lớp Thread là thừa kế lớp này và nạp chồngphương thức run(), phương thức này được gọi khi tuyến đoạn được khởi động lần đầu.Bằng cách nạp chồng phương thức run(), một tuyến đoạn có thể thực hiện một số tác

vụ hữu ích ở hậu trường

Chú ý: Cần nhớ rằng các tuyến đoạn không chạy tự động tại thời điểm chạy Thayvào đó, ta phải gọi phương thức Thread.start(), nếu không tuyến đoạn sẽ không chạy.Khuôn dạng chung để tạo một ứng dụng đa tuyến đoạn bằng cách sử dụng lớpThread:

class C extends Thread

{

Trang 27

public void run() {

// tìm các số nguyên tố lớn hơn một giá trị đã được khởi đầu

Ví dụ: Đoạn mã sau sẽ tạo một tuyến đoạn và khởi động nó chạy

PrimeThread p = new PrimeThread(143);

p.start();

IV.3.2 Thiết lập tuyến đoạn với lớp giao diện Runnable:

Thừa kế lớp Thread là một cách để tạo ra ứng dụng đa tuyến đoạn nhưng nó khôngphải là giải pháp tốt nhất Chúng ta đều biết rằng Java chỉ hỗ trợ đơn thừa kế nên việccài đặt các ứng dụng đa thừa kế là không thể được nếu tạo ứng dụng đa tuyến đoạnbằng cách thừa kế từ lớp Thread Một giải pháp có thể khắc phục điều này là thực thigiao tiếp java.lang.Runnable

Giao tiếp Runnable định nghĩa duy nhất một phương thức run() Các lớp thực thigiao tiếp này chỉ ra rằng chúng có thể chạy độc lập như một tuyến đoạn riêng Giaotiếp này không định nghĩa bất kỳ phương thức nào khác hoặc cung cấp bất kỳ chứcnăng tuyến đoạn cụ thể nào Mục đích duy nhất của nó là báo hiệu các lớp thực thigiao tiếp này có thể chạy như các tuyến đoạn Khi một đối tượng thực thi giao tiếpRunnable được truyền cho constructor của một tuyến đoạn, và các phương thức start()của tuyến đoạn được gọi, phương thức run() sẽ tự động được gọi bởi tuyến đoạn vừađược tạo ra Khi phương thức run() kết thúc xử lý, tuyến đoạn sẽ dừng hoạt động

Trang 28

Việc sử dụng giao tiếp Runnable có một số ưu điểm so với thừa kế lớp Thread.Trước hết, lớp thực thi giao tiếp Runnable có thể tự do thừa kế từ một lớp khác Thứhai, cùng một đối tượng Runnable có thể được truyền cho nhiều tuyến đoạn, vì vậymột số tuyến đoạn tương tranh có thể sử dụng chung mã và thao tác trên cùng dữ liệu.Khuôn dạng chung để tạo một ứng dụng đa tuyến đoạn bằng cách thực thi giao tiếpRunnable:

class C() implements Runnable

{

public C(){Thread t = new Thread(this);}

public void run(){ }

public void run() {

// compute primes larger than minPrime

Ví dụ : Đoạn mã sau sẽ tạo một tuyến đoạn và khởi động nó chạy

PrimeRun p = new PrimeRun(143);

new Thread(p).start();

Trang 29

IV.4 Thứ tự ưu tiên tuyến đoạn

Hầu hết các máy tính chỉ có một CPU, vì thế các tuyến đoạn phải chia sẽ CPU vớicác tuyến đoạn khác Sự thực thi của nhiều tuyến đoạn trên một CPU đơn, theo mộtthứ tự nào đó, được gọi là sự lập danh mục (sheduling)

Trong Java, mỗi tuyến đoạn đều có một thứ tự ưu tiên trong danh sách truy cập ưutiên đến các tài nguyên của hệ điều hành Thứ tự ưu tiên của mỗi đối tượng tuyến đoạnđược định lượng bởi một giá trị nguyên từ 1-10, 5 là giá trị mặc định nếu bạn khôngđăng kí độ ưu tiên cho đối tượng tuyến đoạn

Một tuyến đoạn đều có thể nhường quyền ưu tiên của chúng bằng phương thứcyield() bất cứ khi nào Các tuyến đoạn chỉ có thể nhường CPU cho các tuyến đoạnkhác có độ ưu tiên giống nó, cố gắng nhường cho một tuyến đoạn có độ ưu tiên thấphơn sẽ bị lờ đi

Khi tất cả các tuyến đoạn có thể chạy trong hệ thống có cùng độ ưu tiên, bộ lậpbiểu sẽ chọn tuyến đoạn kế tiếp để chạy trong một thứ tự danh mục luân phiên, không

ưu tiên và bình đẳng

Chúng ta có thể thay đổi thứ tự ưu tiên của một tuyến đoạn bằng cách sử dụngphương thức setPriority() hoặc xác định thứ tự ưu tiên của một tuyến đoạn bởi phươngthức getPriority()

Lớp Thread chứa 3 hằng:

Ví dụ : Đặt thứ tự ưu tiên cho showA và show B( là hai đối tượng của môt lớpShowThread được dẫn xuất từ lớp Thread )

showB.setPriority(Thread.MIN_PRIORITY)

showA.setPriority(Thread.MAX_PRIORITY)

Khi chạy chương trình Java, tuyến đoạn được phép chạy có độ ưu tiên cao nhất sẽchạy đầu tiên Nếu nhiều tuyến đoạn có độ ưu tiên giống nhau, chúng sẽ chạy trong sựluân phiên Tuyến đoạn có độ ưu tiên thấp hơn chỉ có thể chạy khi tuyến đoạn có độ

ưu tiên cao hơn là không hoạt động (ví dụ như là khi chúng đã kết thúc, đã tạm hoãnhoặc đang ngủ)

Nói chung, khi một tuyến đoạn ThreadA có độ ưu tiên cao hơn tuyến đoạnThreadB, ThreadA sẽ là đang chạy và tuyến đoạn ThreadB sẽ phải đợi Tuy vậy thỉnhthoảng Java sẽ chọn để chạy ThreadB để tránh tình trạng " chết đói" Tình trạng nàyxảy ra khi một tuyến đoạn không thể thực hiện bất cứ hoạt động nào bởi độ ưu tiêncủa các tuyến đoạn khác

Trang 30

IV.5 Cơ chế đồng bộ hóa

Khi hai hay nhiều hơn các Thread chia sẽ cùng tài nguyên, nó cần chắc chắn là tạimột thời điểm tài nguyên chỉ có một Thread sử dụng Quá trình này được gọi là sựđồng bộ hóa ( Synchronization)

Các Thread được đồng bộ hoá trong Java sử dụng thông qua một monitor Mộtmonitor là một object cho phép một Thread truy cập vào một tài nguyên Chỉ có mộtThread sử dụng một monitor vào bất kỳ một khoảng thời gian nào Các lập trình viênnói rằng: các Thread sở hữu monitor vào thời gian đó Monitor cũng được gọi là mộtsemaphore

Một Thread có thể sở hữu một monitor chỉ nếu như Thread khác không sở hữumonitor Nếu monitor có sẵn, một thread có thể sở hữu monitor và truy cập thẳng đếntài nguyên được tập hợp với monitor đó Nếu monitor không có sẵn, Thread sẽ bịsuspend cho đến khi monitor trở thành có sẵn( thread đang chờ monitor )

Phải đồng bộ hoá các Thread trong chương trình nếu như có nhiều hơn một Thread

sử dụng cùng một tài nguyên

Có hai cách để đồng bộ hoá các Thread: sử dụng phương thức được đồng bộ hóahoặc phát biểu được đồng bộ hóa:

monitor Một thread có một monitor bất kỳ khi nào một method được bổ sung từ khóasynchronized được gọi Thread lần đầu tiên gọi method được đồng bộ hóa được nóinằm bên trong method và sở hữu method đó cũng như tài nguyên sử dụng bởi method.Các thread khác gọi method được đồng bộ hoá chờ cho đến khi thread đầu tiên giảiphóng method được đồng bộ hóa Nếu method được đồng bộ hoá là một instancemethod, method được đồng bộ hóa kích hoạt khóa đi kèm với instance được gọi làmethod được đồng bộ hóa đó chính là object được biết là this trong suốt quá trình thựcthi toàn bộ method Nếu method được đồng bộ hóa là static thì nó kích hoạt khóa đikèm với class định nghĩa method được đồng bộ hoá

synchronized là sử dụng phát biểu được đồng bộ hóa Một phát biểu được đồng bộ hóachứa một block được đồng bộ hóa, mà bên trong đó đặt những đối tượng và nhữngmethod được đồng bộ hóa Gọi các method chứa block được đồng bộ hóa xảy ra khimột thread có được monitor của đối tượng Một cách khác để sử dụng từ khóasynchronized là sử dụng phát biểu được đồng bộ hóa Một phát biểu được đồng bộ hóachứa một block được đồng bộ hóa, mà bên trong đó đặt những đối tượng và nhữngmethod được đồng bộ hóa Gọi các method chứa block được đồng bộ hóa xảy ra khimột thread có được monitor của đối tượng

- Từ khóa synchronized: Lệnh synchronized cho phép đồng bộ hóa một đốitượng mà không cần yêu cầu bạn tác động một phương thức synchronized trên đối

tượng đó.Cú pháp: synchronized (expr)statement Khi có được khóa, statement được

xử lý giống như nó là một phương thức synchronized trên đối tượng đó

Trang 31

- Giao tiếp giữa các Thread: Các thread mở ra cho các lập trình viên một khoảngkhông mới trong lập trình, nơi mà ở đó những phần của một chương trình thực thikhông đồng bộ với nhau, mỗi một xử lý độc lập với những xử lý khác Tuy nhiên mỗithread thỉnh thoảng cần tính toán việc xử lý của chúng và vì thế cần có thể giao tiếpvới những thread khác trong suốt quá trình xử lý Các lập trình viên gọi đây là inter-process communication (giao tiếp trong xử lý) Bạn có thể có các thread giao tiếp vớicác thread khác trong chương trình của bạn bằng cách sử dụng những method wait(),notify() và notifyAll() Những method này được gọi từ bên trong một method đượcđồng bộ hóa Method wait() nói cho một thread giải phóng monitor và đi vào trạngthái suspend Có hai dạng method wait() khác nhau Một dạng không yêu cầu đối số

và vì thế một thread sẽ chờ cho đến khi nó được thông báo Một dạng khác có đối số

để bạn xác định khoảng thời gian chờ Bạn xác định độ dài thời gian trong mili giây vàđặt nó vào trong method wait() Method notify() nói cho một thread đang suspend bởimethod wait() và lấy lại điều khiển của monitor Method notifyAll() đánh thức tất cảcác thread đang chờ điều khiển của monitor Những thread khác chờ trong trạng tháisuspend cho đến khi monitor có sẵn trở lại

- Sự đình trệ: Deadlock là trường hợp khi hai hay nhiều tiến trình chờ đợi lẫnnhau để giải phóng tài nguyên ,hoặc chờ đợi lẫn nhau để sử dụng tài nguyên theo vòngtròn Deadlock là trường hợp thường gặp trong multiprocessing, trong môi trường mànhiều tiến trình chia sẻ tài nguyên, ví dụ như phần mềm Ví dụ: Giả sử một tiến trìnhvào monitor của đối tượng X và một Thread khác vào monitor của đối tượng Y Nếuthread trong đối tượng X gọi phương thức đồng bộ trên đối tượng Y nó sẽ nằm trongkhối chờ đợi Tuy nhiên, nếu thread trong đối tượng Y quay trở lại gọi phương thứcđồng bộ trong X, nó sẽ chờ mãi mãi vì nó truy cập vào X mà lẽ ra nó phải được giảiphóng trên Y, vì thế thread đầu tiên phải được hoàn thành Deadlock xảy ra do cácnguyên nhân sau: Nó hiếm khi xuất hiện khi 2 thread phân chia thời gian trong cùngmức độ và nó liên quan đến nhiều hơn 2 thread và hai đối tượng đồng bộ

Trang 32

V.Giới thiệu chung về ASP.NET

Net Phatform bao gồm Net Framework và những công cụ được dùng để xây

dựng, phát triển ứng dụng và dịch vụ ASP.Net

Hình 6 Các loại hình dịch vụ

Những sản phẩm công nghệ Net của Microsoft bao gồm: MSN.Net, Office.Net,Visual Studio.Net và Windows Server 2003 được biết đến với tên gọi Windows NetServer

Visual Studio Net là bộ phần mềm được dùng để xây dựng và phát triển các ứngdụng bao gồm các ngôn ngữ lập trình: C++.Net, Visual Basic.Net, ASP.Net, C# và J#.Tất cả các ngôn ngữ này được xây dựng dựa trên nền Net Framework, vì thế, bạn sẽnhận thấy cú pháp cơ bản của những ngôn ngữ này tương tự nhau

Trang 33

V.2 Tìm hiểu về Net Framework

Hình 7: Kiến trúc Net Framework

V.2.1 Hệ Điều Hành

Cung cấp các chức năng xây dựng ứng dụng

Với vai trò quản lý việc xây dựng và thi hành ứng dụng, NET Framework cung cấpcác lớp đối tượng (Class) để bạn có thể gọi thi hành các chức năng mà đối tượng đócung cấp Tuy nhiên, lời kêu gọi của bạn có được "hưởng ứng" hay không còn tùythuộc vào khả năng của hệ điều hành đang chạy ứng dụng của bạn

Các chức năng đơn giản như hiển thị một hộp thông báo (Messagebox) sẽđược NET Framework sử dụng các hàm API của Windows Chức năng phức tạp hơnnhư sử dụng các COMponent sẽ yêu cầu Windows phải cài đặt Microsoft TransactionServer (MTS) hay các chức năng trên Web cần Windows phải cài đặt InternetInformation Server (IIS)

Như vậy, bạn cần biết rằng lựa chọn một hệ điều hành để cài đặt và sử dụng NETFramework cũng không kém phần quan trọng Cài đặt NET Framework trên các hệđiều hành Windows 2000, 2000 Server, XP, XP.NET, 2003 Server sẽ đơn giản và tiệndụng hơn trong khi lập trình

Trang 34

V.2.2 Hệ Common Language Runtime

Là thành phần "kết nối" giữa các phần khác trong NET Framework với hệ điềuhành Common Language Runtime (CLR) giữ vai trò quản lý việc thi hành các ứngdụng viết bằng NET trên Windows CLR sẽ thông dịch các lời gọi từ chương trìnhcho Windows thi hành, đảm bảo ứng dụng không chiếm dụng và sử dụng tràn lan tàinguyên của hệ thống Nó cũng không cho phép các lệnh "nguy hiểm" được thi hành.Các chức năng này được thực thi bởi các thành phần bên trong CLR như Class loader,Just In Time compiler, Garbage collector, Exception handler, COM marshaller,Security engine,…

Trong các phiên bản hệ điều hành Windows mới như XP.NET và Windows 2003,CLR được gắn kèm với hệ điều hành Điều này đảm bảo ứng dụng viết ra trên máytính của chúng ta sẽ chạy trên máy tính khác mà không cần cài đặt, các bước thực hiệnchỉ đơn giản là một lệnh xcopy của DOS

V.2.3 Bộ thư viện các lớp đối tượng

Nếu phải giải nghĩa từ "Framework" trong thuật ngữ NET Framework thì đây làlúc thích hợp nhất Framework chính là một tập hợp hay thư viện các lớp đối tượng hỗtrợ người lập trình khi xây dựng ứng dụng Có thể một số người trong chúng ta đãnghe qua về MFC và JFC Microsoft Foundation Class là bộ thư viện mà lập trìnhviên Visual C++ sử dụng trong khi Java Foundation Class là bộ thư viện dành cho cáclập trình viên Java Giờ đây, có thể coi NET Framework là bộ thư viện dành cho cáclập trình viên NET

Với hơn 5000 lớp đối tượng để gọi thực hiện đủ các loại dịch vụ từ hệ điều hành,chúng ta có thể bắt đầu xây dựng ứng dụng bằng Notepad.exe… Nhiều người lầmtưởng rằng các môi trường phát triển phần mềm như Visual Studio 98 hay VisualStudio.NET là tất cả những gì cần để viết chương trình Thực ra, chúng là những phầnmềm dùng làm "vỏ bọc" bên ngoài Với chúng, chúng ta sẽ viết được các đoạn lệnh đủcác màu xanh, đỏ; lỗi cú pháp báo ngay khi đang gõ lệnh; thuộc tính của các đối tượngđược đặt ngay trên cửa sổ properties, giao diện được thiết kế theo phong cách trựcquan… Như vậy, chúng ta có thể hình dung được tầm quan trọng của .NETFramework Nếu không có cái cốt lõi NET Framework, Visual Studio.NET cũng chỉ

là cái vỏ bọc Nhưng nếu không có Visual Studio.NET, công việc của lập trìnhviên NET cũng lắm bước gian nan

1 Base class library – thư viện các lớp cơ sở

Đây là thư viện các lớp cơ bản nhất, được dùng trong khi lập trình hay bản thânnhững người xây dựng NET Framework cũng phải dùng nó để xây dựng các lớp caohơn Ví dụ các lớp trong thư viện này là String, Integer, Exception,…

2 ADO.NET và XML

Bộ thư viện này gồm các lớp dùng để xử lý dữ liệu ADO.NET thay thế ADO đểtrong việc thao tác với các dữ liệu thông thường Các lớp đối tượng XML được cung

Trang 35

cấp để bạn xử lý các dữ liệu theo định dạng mới: XML Các ví dụ cho bộ thư viện này

là SqlDataAdapter, SqlCommand, DataSet, XMLReader, XMLWriter,…

3 ASP.NET

Bộ thư viện các lớp đối tượng dùng trong việc xây dựng các ứng dụng Web.ASP.NET không phải là phiên bản mới của ASP 3.0 Ứng dụng web xây dựng bằngASP.NET tận dụng được toàn bộ khả năng của NET Framework Bên cạnh đó là một

"phong cách" lập trình mới mà Microsoft đặt cho nó một tên gọi rất kêu: code behind.Đây là cách mà lập trình viên xây dựng các ứng dụng Windows based thường sử dụng– giao diện và lệnh được tách riêng Tuy nhiên, nếu bạn đã từng quen với việc lậptrình ứng dụng web, đây đúng là một sự "đổi đời" vì bạn đã được giải phóng khỏi mớlệnh HTML lộn xộn tới hoa cả mắt

Sự xuất hiện của ASP.NET làm cân xứng giữa quá trình xây dựng ứng dụng trênWindows và Web ASP.NET cung cấp một bộ các Server Control để lập trình viên bắt

sự kiện và xử lý dữ liệu của ứng dụng như đang làm việc với ứng dụng Windows Nócũng cho phép chúng ta chuyển một ứng dụng trước đây viết chỉ để chạy trênWindows thành một ứng dụng Web khá dễ dàng Ví dụ cho các lớp trong thư viện này

là WebControl, HTMLControl, …

4 Web services

Web services có thể hiểu khá sát nghĩa là các dịch vụ được cung cấp qua Web (hayInternet) Dịch vụ được coi là Web service không nhằm vào người dùng mà nhằm vàongười xây dựng phần mềm Web service có thể dùng để cung cấp các dữ liệu hay mộtchức năng tính toán

Ví dụ, công ty du lịch của bạn đang sử dụng một hệ thống phần mềm để ghi nhậnthông tin về khách du lịch đăng ký đi các tour Để thực hiện việc đặt phòng khách sạntại địa điểm du lịch, công ty cần biết thông tin về phòng trống tại các khách sạn.Khách sạn có thể cung cấp một Web service để cho biết thông tin về các phòng trốngtại một thời điểm Dựa vào đó, phần mềm của bạn sẽ biết rằng liệu có đủ chỗ để đặtphòng cho khách du lịch không? Nếu đủ, phần mềm lại có thể dùng một Web servicekhác cung cấp chức năng đặt phòng để thuê khách sạn Điểm lợi của Web service ởđây là bạn không cần một người làm việc liên lạc với khách sạn để hỏi thông tinphòng, sau đó, với đủ các thông tin về nhiều loại phòng người đó sẽ xác định loạiphòng nào cần đặt, số lượng đặt bao nhiêu, đủ hay không đủ rồi lại liên lạc lại vớikhách sạn để đặt phòng Đừng quên là khách sạn lúc này cũng cần có người để làmviệc với nhân viên của bạn và chưa chắc họ có thể liên lạc thành công

Web service được cung cấp dựa vào ASP.NET và sự hỗ trợ từ phía hệ điều hànhcủa Internet Information Server

5 Window form

Bộ thư viện về Window form gồm các lớp đối tượng dành cho việc xây dựng cácứng dụng Windows based Việc xây dựng ứng dụng loại này vẫn được hỗ trợ tốt từtrước tới nay bởi các công cụ và ngôn ngữ lập trình của Microsoft Giờ đây, ứng dụng

Trang 36

chỉ chạy trên Windows sẽ có thể làm việc với ứng dụng Web dựa vào Web service Ví

dụ về các lớp trong thư viện này là: Form, UserControl,…

V.2.4 Phân nhóm các lớp đối tượng theo loại

Một khái niệm không được thể hiện trong hình vẽ trên nhưng cần đề cập đến làNamespace Đây là tên gọi một nhóm các lớp đối tượng phục vụ cho một mục đíchnào đó Chẳng hạn, các lớp đối tượng xử lý dữ liệu sẽ đặt trong một namespace tên làData Các lớp đối tượng dành cho việc vẽ hay hiển thị chữ đặt trong namespace tên làDrawing

Một namespace có thể là con của một namespace lớn hơn Namespace lớn nhấttrong NET Framework là System

Hình 8: Hệ thống tên miền (Namespace)

Lợi điểm của namespace là phân nhóm các lớp đối tượng, giúp người dùng dễ nhậnbiết và sử dụng Ngoài ra, namespace tránh việc các lớp đối tượng có tên trùng vớinhau không sử dụng được .NET Framework cho phép chúng ta tạo ra các lớp đốitượng và các namespace của riêng mình Với hơn 5000 tên có sẵn, việc đặt trùng tênlớp của mình với một lớp đối tượng đã có là điều khó tránh khỏi Namespace cho phépviệc này xảy ra bằng cách sử dụng một tên đầy đủ để nói đến một lớp đối tượng Ví

dụ, nếu muốn dùng lớp WebControls, chúng ta có thể dùng tên tắt của nó làWebControls hay tên đầy đủ là System.Web.UI.WebControls

Đặc điểm của bộ thư viện các đối tượng NET Framework là sự trải rộng để hỗ trợtất cả các ngôn ngữ lập trình NET như chúng ta thấy ở hình vẽ trên Điều này sẽ giúpnhững người mới bắt đầu ít bận tâm hơn trong việc lựa chọn ngôn ngữ lập trình chomình vì tất cả các ngôn ngữ đều mạnh ngang nhau Cũng bằng cách sử dụng các lớpđối tượng để xây dựng ứng dụng, NET Framework buộc người lập trình phải sử dụng

kỹ thuật lập trình hướng đối tượng

Trang 37

V.3 Tìm hiểu về ASP.Net

Từ khoảng cuối thập niên 90, ASP (Active Server Page) đã được nhiều lập trìnhviên lựa chọn để xây dựng và phát triển ứng dụng web động trên máy chủ sử dụng hệđiều hành Windows ASP đã thể hiện được những ưu điểm của mình với mô hình lậptrình thủ tục đơn giản, sử dụng hiệu quả các đối tượng COM: ADO (ActiveX DataObject) - xử lý dữ liệu, FSO (File System Object) - làm việc với hệ thống tập tin…,đồng thời, ASP cũng hỗ trợ nhiều ngôn ngữ: VBScript, JavaScript Chính những ưuđiểm đó, ASP đã được yêu thích trong một thời gian dài

Tuy nhiên, ASP vẫn còn tồn đọng một số khó khăn như Code ASP và HTML lẫnlộn, điều này làm cho quá trình viết code khó khăn, thể hiện và trình bày code khôngtrong sáng, hạn chế khả năng sử dụng lại code Bên cạnh đó, khi triển khai cài đặt, dokhông được biên dịch trước nên dễ bị mất source code Thêm vào đó, ASP không có

hỗ trợ cache, không được biên dịch trước nên phần nào hạn chế về mặt tốc độ thựchiện Quá trình xử lý Postback khó khăn, …

Đầu năm 2002, Microsoft giới thiệu một kỹ thuật lập trình Web khá mới mẻ với têngọi ban đầu là ASP+, tên chính thức sau này là ASP.Net Với ASP.Net, không nhữngkhông cần đòi hỏi bạn phải biết các tag HTML, thiết kế web, mà nó còn hỗ trợ mạnhlập trình hướng đối tượng trong quá trình xây dựng và phát triển ứng dụng Web.ASP.Net là kỹ thuật lập trình và phát triển ứng dụng web ở phía Server (Server-side) dựa trên nền tảng của Microsoft Net Framework

Hầu hết, những người mới đến với lập trình web đều bắt đầu tìm hiểu những kỹthuật ở phía Client (Client-side) như: HTML, Java Script, CSS (Cascading StyleSheets) Khi Web browser yêu cầu một trang web (trang web sử dụng kỹ thuật client-side), Web server tìm trang web mà Client yêu cầu, sau đó gởi về cho Client Clientnhận kết quả trả về từ Server và hiển thị lên màn hình

ASP.Net sử dụng kỹ thuật lập trình ở phía server thì hoàn toàn khác, mã lệnh ở phíaserver (ví dụ: mã lệnh trong trang ASP) sẽ được biên dịch và thi hành tại Web Server.Sau khi được Server đọc, biên dịch và thi hành, kết quả tự động được chuyển sangHTML/JavaScript/CSS và trả về cho Client Tất cả các xử lý lệnh ASP.Net đều đượcthực hiện tại Server và do đó, gọi là kỹ thuật lập trình ở phía server

Trang 38

V.4 Quá trình xử lý tập tin ASPX

Khi Web server nhận được yêu cầu từ phía client, nó sẽ tìm kiếm tập tin được yêucầu thông qua chuỗi URL được gởi về, sau đó, tiến hành xử lý theo sơ đồ sau:

Hình 9: Quá trình xử lý tập tin ASPX

Trang 39

V.5 Phân loại tập tin trong ASP.Net

global.asa của ASP, là tập tin quản lý các sự kiện củaứng dụng (application), session, và các sự kiện khi cócác yêu cầu tới trang web

phần mở rộng là ascx

Web.config chứa hầu hết các cấu hình của ứng dụng

Bảng 1: Phân loại tập tin trong ASP.NET

ASP.Net cho phép bạn lựa chọn một trong các ngôn ngữ lập trình mà bạn yêu thích:Visual Basic.Net, J#, C#,…

Trang ASP.Net được biên dịch trước Thay vì phải đọc và thông dịch mỗi khi trangweb được yêu cầu, ASP.Net biên dịch những trang web động thành những tập tinDLL mà Server có thể thi hành nhanh chóng và hiệu quả Yếu tố này là một bướcnhảy vọt đáng kể so với kỹ thuật thông dịch của ASP

Trang 40

Hình 10: Cơ chế hoạt động của ASP.Net

ASP.Net hỗ trợ mạnh mẽ bộ thư viện phong phú và đa dạng của Net Framework,làm việc với XML, Web Service, truy cập cơ sở dữ liệu qua ADO.Net, …

ASPX và ASP có thể cùng hoạt động trong 1 ứng dụng

ASP.Net sử dụng phong cách lập trình mới: Code behide Tách code riêng, giaodiện riêng è Dễ đọc, dễ quản lý và bảo trì

Kiến trúc lập trình giống ứng dụng trên Windows

Hỗ trợ quản lý trạng thái của các control

Tự động phát sinh mã HTML cho các Server control tương ứng với từng loạiBrowser

Hỗ trợ nhiều cơ chế cache

Triển khai cài đặt:

Hỗ trợ quản lý ứng dụng ở mức toàn cục

- Quản lý session trên nhiều Server, không cần Cookies

Kết luận : ASP.NET có nhiều ưu điểm hơn các nền tảng khác khi dùng nó để tạo

ứng dụng Web Có thể phần lớn những ưu điểm quan trọng của nó đi kèm với các máychủ Windows và các công cụ lập trình Windows Ứng dụng web được tạo bởiASP.NET được tạo ra, bắt lỗi và triển khai rất dễ dàng thông qua các tác vụ có thểthực thi trọn vẹn trong một môi trường phát triển duy nhất – Visual Studio NET.Chính vì vậy việc lựa chọn ASP.NET với mong muốn hỗ trợ những tính năng cầnthiết trong việc xây dựng hệ thống chia sẻ multimedia là rất thiết thực

Ngày đăng: 27/03/2019, 15:31

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w