Tải bản đầy đủ (.pdf) (22 trang)

TÌM HIỂU CƠ CHẾ GIỮA CÁC TIẾN TRÌNH(INTERPROCESS COMMUNICATION) VÀ ĐỒNG BỘ HÓA MÔ PHỎNG BÀI TOÁN SLEEPING BABER PROBLEM

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.22 MB, 22 trang )

BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THÔNG TIN

ĐỒ ÁN MÔN HỌC
CƠ SỞ NGÀNH MẠNG

ĐỀ TÀI 1: TÌM HIỂU CƠ CHẾ GIỮA CÁC TIẾN
TRÌNH(INTER-PROCESS COMMUNICATION) VÀ ĐỒNG
BỘ HÓA MÔ PHỎNG BÀI TOÁN SLEEPING BABER
PROBLEM
ĐỀ TÀI 2: XÂY DỰNG ỨNG DỤNG CHAT ĐA PHƯƠNG
TIỆN

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

LỜI CẢM ƠN

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 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.
Hệ điều hành là tập hợp các chương trình phần mềm chạy trên máy tính, dùng để
điều hành, quản lý các thiết bị phần cứng và tài nguyên phần mềm trên máy tính.
Hệ điều hành đóng vai trò trung gian trong việc giao tiếp giữa người sử dụng và


phần cứng máy tính, cung cấp một môi trường cho phép người sử dụng phát triển
và thực hiện các ứng dụng một cách dễ dàng.
Cùng với sự phát triển của mạng Internet hiện nay, thì việc nghiên cứu nằm vững
những kiến thức về mạng là rất quan trọng.
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ực
hiện 2 đề tài: Bài toán Sleeping Barber Problem và xây dựng ứng dụng chat trên
nền tảng android.
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 kĩ hơn những kiến thức này, và đặc biệt là cô Nguyễn Thị Lệ
Quyên đã nhiệt tình theo dõi, hướng dẫn em trong quá trình thực hiện đề tài này.
Vì kiến thức còn hạn hẹp, nên không thể tránh khỏi những sai sót trong quá trình
làm đề tài, rất mong nhận được sự góp ý của thầy cô để sản phầm được hoàn thiện
hơn. Em xin chân thành cảm ơn.

Sinh viên thực hiện
Dương Văn Trang

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

MỤC LỤC
PHẦN 1: NGUYÊN LÝ HỆ ĐIỀU HÀNH ............................................................................................. 5
Cơ Chế Giao Tiếp Giữa Các Tiến Trình ............................................................................. 5

I.
1.


Tiến Trình ........................................................................................................................... 5

2.

Tương Tranh Giữa Các Process ....................................................................................... 5
Đồng Bộ Hóa....................................................................................................................... 6

II.
1.

Mục tiêu của đồng bộ......................................................................................................... 6

2.

Miền găng ........................................................................................................................... 6

3.

Nguyên tắc đồng bộ............................................................................................................ 6

4.

Các giải thuật đồng bộ ....................................................................................................... 7
4.1

Busy And Waiting ........................................................................................................ 7

a.


Giải pháp phần mềm ........................................................................................................ 7

b.

Giải pháp phần cứng ........................................................................................................ 8

4.2
a.

Sleep And Wakeup ....................................................................................................... 9
Semaphore s là một biến có các thuộc tính sau: ............................................................. 10

III.

Mô Phỏng Bài Toán Barber Sleeping Problem ............................................................. 12

1.

Bài Toán ............................................................................................................................ 12

2.

Phân tích ........................................................................................................................... 12

3.

Sơ đồ bài toán ................................................................................................................... 13

4.


Triển Khai......................................................................................................................... 14

5.

Kết Quả ............................................................................................................................. 14

PHẦN 2: LẬP TRÌNH MẠNG .................................................................................................. 16
Cơ sở lý thuyết ..................................................................................................................... 16

I.
II.

Phân tích hệ thống ........................................................................................................... 17

1.

Mô hình ứng dụng............................................................................................................ 17

2.

Mô hình use case ứng dụng ............................................................................................. 18

III.

Triển khai và đánh giá kết quả ....................................................................................... 18

1.

Màn hình giao diện ............................................................................................................ 18


IV.
1.

Kết luận và hướng phát triển .......................................................................................... 21
Kết quả đạt được .............................................................................................................. 21

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

2.

CƠ SỞ NGÀNH MẠNG

Hướng phát triển.............................................................................................................. 21

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

PHẦN 1: NGUYÊN LÝ HỆ ĐIỀU HÀNH
Đề tài: ‘Tìm hiều cơ chế giao tiếp giữa các tiến trình (Inter-process communication IPC)
và đồng bộ hóa mô phỏng bài toán Anh thợ cắt tóc ngủ gật”.
I.

Cơ Chế Giao Tiếp Giữa Các Tiến Trình

1. Tiến Trình
Process trong hệ điều hành
Khái niệm: process là một chương trình đang hoạt động (đang chạy, đã
được tải lên bộ nhớ chính để hoạt động).
Một chương trình có thể có hai (hay nhiều) process đang chạy, nhưng
chúng được coi là hai (hay nhiều) quá trình độc lập với nhau.
Một process (tiến trình) trong hệ điều hành có thể được tiến hành độc lập
hoặc giao tiếp với nhau. Process độc lập là khi process không ảnh hưởng
hoặc bị ảnh hưởng bởi các process khác trong hệ thống, và không chia sẻ
data với bất kì process nào. Process giao tiếp khi process đó có thể ảnh
hưởng hoặc bị ảnh hưởng bởi các process khác trong hệ thống, và sự chia
sẻ data có diễn ra.
Các process cần phải giao tiếp với nhau vì:
 Giúp chia sẻ thông tin giữa các users.
 Giúp speech up các tác vụ trong máy tính.
 Giúp xây dựng modun.
 Giúp thuận tiện trong chạy nhiều tác vụ cùng một lúc.

2. Tương Tranh Giữa Các Process
Inter Process communication (hay còn gọi là IPC) – giao tiếp giữa các
process – là một phương thức không thể thiếu trong việc giúp các process
trao đổi thông tin với nhau.
Hai models chính của IPC là shared memory (chia sẻ bộ nhớ) – với nhiệm
vụ hình thành khu vực lưu trữ bộ nhớ chung – và message passing (truyền
tin) – với nhiệm vụ truyền tải tin nhắn liên tục giữa các process.

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN


CƠ SỞ NGÀNH MẠNG

IPC sử dụng model shared memory sẽ cần những process tham gia mở một
vùng nhớ chung. Vùng nhớ chung này được tạo thành từ nhiều vùng nhớ
riêng của mỗi process.
Để sử dụng model shared memory, các process cần cho phép việc truy cập
bộ nhớ của nhau để có thể sử dụng và viết data trên vùng chia sẻ chung.
Các tiến trình sẽ quyết định kiểu data nào được chia sẻ và vùng chia sẻ
chung ở đâu. Tất nhiên chúng phải bảo đảm các vùng chia sẻ chung không
bị ghi đè lên nhau. Để giải quyết vấn đề vùng chia sẻ chung không bị ghi đề
lên nhau hướng giải quyết của vấn đề này là đồng bộ hóa (synchronising).
II.

Đồng Bộ Hóa
1. Mục tiêu của đồng bộ
 Đảm bảo truy xuất độc quyền
 Đảm bảo cơ chế phối hợp giữa các tiến trình
2. Miền găng
Đoạn code trong các tiến trình đồng thời, có tác động đến các tài nguyên có
thể trở thành tài nguyên găng được gọi là đoạn găng hay miền găng. Tức là,
các đoạn code trong các chường trình dùng để truy cập đến các vùng nhớ
chia sẻ, các tập tin chia sẻ được gọi là các đoạn găng.
Để hạn chế các lỗi có thể xảy ra do sử dụng tài nguyên găng, hệ điều hành
phải điều khiển các tiến trình sao cho, tại một thời điểm chỉ có một tiến
trình nằm trong đoạn găng, nếu có nhiều tiến trình cùng muốn vào( thực
hiện) đoạn găng thì chỉ có một tiến trình được vào, các tiến trình khác phải
chờ, một tiến trình khi ra khỏi( kết thúc) đoạn găng phải báo cho hệ điều
hành và/ hoặc các tiến trình khác biết để các tiến trình này vào đoạn
găng,vv. Các công tác điều khiến tiến trình được thực hiện đoạn găng của

hệ điều hành được gọi là điều độ tiến trình qua đoạn găng. Để công tác điều
độ tiến trình qua đoạn găng được thành công, thì cần phải có sự phối hợp
giữa vi xử lí, hệ điều hành và người lập trình. Vi xử lí đưa các chỉ thị, hệ
điều hành cung cấp các công cụ để người lập trình cây dựng các sơ đồ điều
độ hợp lý, để đảm bảo sự độc quyền trong việc sử dụng tài nguyên găng
của tiến trình.
3. Nguyên tắc đồng bộ
 Tại một thời điểm chỉ có một tiến trình trong miền găng

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

 Không có sự ràng buộc về tốc độ của các tiến trình và số bộ xử lý
trong hệ thống
 Một tiến trình tạm dừng bên ngoài miền găng không được ngăn cản
tiến trình khác vào miền găng
 Không có tiến trình chơ vô hạn để vào miền găng
4. Các giải thuật đồng bộ
4.1 Busy And Waiting
a. Giải pháp phần mềm
 Dùng biến lock: các tiến trình chia sẻ một biến dùng chung lock.
- Một tiến trình muốn vào miền găng phải kiểm tra giá trị của biến
lock.
- Nếu lock = 0, tiến trình đặt lại giá trị cho lock = 1 và đi vào miền
găng.
- Nếu lock = 1, tiến trình phải chờ đến khi lock = 0.

while (TRUE)
{
while (lock == 1); // wait
lock = 1;
critical-section ();
lock = 0;
Noncritical-section (); }
 Kiểm tra luân phiên: Hai tiến trình sử dụng chung biến turn
-

Khởi tạo turn = 0.
Nếu turn = 0, tiến trình A được vào miền găng.
Nếu turn = 1, tiến trình A đi vào một vòng lặp chờ đến khi turn
nhận giá trị 0.
Khi tiến trình A rời khỏi miền găng, nó đặt turn = 1 cho phép tiến
trình B đi vào miền găng
while (TRUE) {

while (TRUE) {

critical-section ();

critical-section ();

Noncritical-section ();

Noncritical-section ();

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG



BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

 Giải pháp của Peterson: Các tiến trình chia sẻ hai biến chung
- int turn; // đến lượt tiến trình nào
- Khởi tạo
int interesse[2] = FALSE
interesse[0]=interesse[1]=FALSE
-

Nếu interesse[i] = TRUE: Pi muốn vào miền găng, nó phải đặt
turn=j đề nghị thử tiến trình Pj vào miền găng.
Nếu tiến trình Pj không có nhu cầu vào miền găng
(interesse[j]=FALSE), thì Pi có thể vào miền găng.
Ngược lại, Pi phải chờ đến khi interesse[j]=FALSE. Khi tiến
trình Pi rời khỏi miền găng, nó đặt lại giá trị cho interesse[i]=
FALSE.
while (TRUE) {
int j = 1-i; // j là tiến trình còn lại
interesse[i]= TRUE;
turn = j;
while (turn == j && interesse[j]==TRUE);
critical-section ();
interesse[i] = FALSE;
Noncritical-section ();
}

b. Giải pháp phần cứng

 Cấm ngắt: cho phép tiến trình cấm tất cả các ngắt trước khi vào
miền găng, và phục hồi ngắt khi ra khỏi miề
ếu hệ
thống có nhiều bộ xử lý, lệnh cấm ngắt chỉ có tác dụng trên bộ xử
lý đang xử lý tiến trình, còn các tiến trình hoạt động trên các bộ
xử lý khác vẫn có thể truy xuất đến miền găng.

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

 Chỉ thị TSL(Test-and-set Lock):
Nếu có hai chỉ thị TSL xử lý đồng thời,
Test-and-Setlock(boolean
chúng sẽ được xử lý tuần tự.
target)
Có thể cài đặt giải pháp truy xuất độc
quyền với TSL bằng cách sử dụng {
thêm một biến lock, được khởi gán Test-and-Setlock = target;
là FALSE. Tiến trình phải kiểm tra giá
target = TRUE;
trị của biến lock trước khi vào miền
}
găng, nếu lock = FALSE, tiến trình có
thể vào miền găng.
Các giải pháp “busy waiting” buộc tiến trình phải liên tục kiểm tra điều
kiện để phát hiện thời điểm thích hợp được vào miền găng. Việc kiểm tra

tiêu thụ rất nhiều thời gian sử dụng CPU, tiến trình đang chờ vẫn chiếm
dụng CPU. Xu hướng giải quyết vấn đề đồng bộ hóa là nên tránh các giải
pháp “busy waiting”.
4.2 Sleep And Wakeup
Một tiến trình chưa đủ điều kiện vào miền găng sẽ chuyển sang trạng
thái blocked, từ bỏ quyền sử dụng CPU.
 Sử dụng hai thủ tục cơ bản SLEEP và WAKEUP
 Một tiến trình chưa đủ điều kiện vào miền găng, nó gọi SLEEP
để tự block đến khi có một tiến trình khác gọi WAKEUP để giải
phóng cho nó.
 Một tiến trình gọi WAKEUP khi ra khỏi miền găng để đánh thức
một tiến trình đang chờ.

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

int busy;//busy=1 miền găng đang bị chiếm
int blocked;// số tiến trình đang bị khóa
while (TRUE){
if (busy){
blocked = blocked + 1;
sleep();
}
else busy = 1;
critical-section ();
busy = 0;

if(blocked){
wakeup(process);
blocked = blocked - 1;
}
Noncritical-section ();
}
a. Semaphore s là một biến có các thuộc tính sau:
 Một giá trị nguyên dương e(s).
 Một hàng đợi f(s) lưu danh sách các tiến trình đang bị khóa (chờ)
trên semaphore s.
 Hai thao tác được định nghĩa trên semaphore:
 Down(s): giảm s đi 1 đơn vị nếu e(s) > 0, và tiếp tục xử lý.
Ngược lại, nếu e(s) ≤ 0, tiến trình phải chờ đến khi e(s) >0.
 Up(s): s lên 1 đơn vị. Nếu có một hoặc nhiều tiến trình đang
chờ trên semaphore s, bị khóa bởi thao tác Down, thì hệ thống
sẽ chọn một trong các tiến trình này để kết thúc thao tác
Down và cho tiếp tục xử lý.
 Có thể dùng semaphore để giải quyết vấn đề truy xuất độc quyền
hay tổ chức phối hợp giữa các tiến trình.

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

Down(s):
e(s) = e(s) - 1; if e(s) <
0{

status(P)= blocked;
enter(P,f(s));
}

Up(s):
e(s) = e(s) + 1;
if s ≤ 0 {
exit(Q,f(s));//Q: tiến trình đang chờ trên s
status (Q) = ready;
enter(Q,ready-list);
}

b. Monitor là đối tượng được cung cấp sẵn bởi hệ thống.
Monitor là một cấu trúc đặc biệt bao gồm các thủ tục, các biến và cấu
trúc dữ liệu có các thuộc tính sau :
- Trong monitor, ta có thể định nghĩa nhiều biến điều kiện. Biến điều
kiện chỉ có tên, không có kiểu và không có giá trị nên ta không dùng nó
như biến bình thường. Chỉ có 2 tác vụ định sẵn có thể truy xuất biến
điều kiện :
- hàm wait(cond) : bắt process ngủ chờ trên biến điều kiện cond.
- hàm signal(cond) : đánh thức các process đang ngủ chờ trên biến
cond.
- Về mặt điều khiển, Monitor chỉ cho phép tối đa 1 process được vào thi
hành 1 tác vụ nào đó của Monitor tại từng thời điểm. Nhờ tính chất này,
ta dễ dàng giải quyết việc loại trừ tương hỗ giữa các process khi chúng
truy xuất đồng thời 1 tài nguyên dùng chung nào đó bằng cách đặt mỗi
đoạn CS vào 1 tác vụ riêng và đặt tất cả các tác vụ này trong một
Monitor nào đó.
c. Message Passing
giải pháp này dựa trên cơ sở trao đổi thông điệp với hai primitive Send

và Receive để thực hiện sự đồng bộ hóa:
Send(destination, message): gởi một thông điệp đến một tiến trình hay
gởi vào hộp thư.
Receive(source,message): nhận một thông điệp thừ một tiến trình hay từ
bất kỳ một tiến trình nào, tiến trình gọi sẽ chờ nếu không có thông điệp
nào để nhận.
Có nhiều cách thức để thực hiện việc truy xuất độc quyền bằng cơ chế
trao đổi thông điệp. Đây là một mô hình đơn giản: một tiến trình kiểm
soát việc sử dụng tài nguyên và nhiều tiến trình khác yêu cầu tài nguyên
này. Tiến trình có yêu cầu tài nguyên sẽ gởi một thông điệp đến tiến
trình kiểm soát và sau đó chuyển sang trạng thái blocked cho đến khi
DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

nhận được một thông điệp chấp nhận cho truy xuất từ tiến trình kiểm
soát tài nguyên.Khi sử dụng xong tài nguyên , tiến trình gởi một thông
điệp khác đến tiến trình kiểm soát để báo kết thúc truy xuất. Về phần
tiến trình kiểm soát , khi nhận được thông điệp yêu cầu tài nguyên, nó
sẽ chờ đến khi tài nguyên sẵn sàng để cấp phát thì gởi một thông điệp
đến tiến trình đang bị khóa trên tài nguyên đó để đánh thức tiến trình
này.
while (TRUE) {
Send(process controler, request message);
Receive(process controler, accept message);
critical-section ();
Send(process controler, end message);

Noncritical-section ();
}
Các primitive semaphore và monitor có thể giải quyết được vấn đề truy
xuất độc quyền trên các máy tính có một hoặc nhiều bộ xử lý chia sẻ một
vùng nhớ chung. Nhưng các primitive không hữu dụng trong các hệ thống
phân tán, khi mà mỗi bộ xử lý sỡ hữu một bộ nhớ riêng biệt và liên lạc
thông qua mạng. Trong những hệ thống phân tán như thế, cơ chế trao đổi
thông điệp tỏ ra hữu hiệu và được dùng để giải quyết bài toán đồng bộ hóa.
III.

Mô Phỏng Bài Toán Barber Sleeping Problem
1. Bài Toán
Một tiệm hớt tóc có 1 phòng đợi n ghế, và phòng cắt tóc với 1 ghế cắt tóc.
Nếu không các khách thì người thợ đi ngủ. Nếu một khách mới vào và
không còn ghế trống thì người khách rời tiệm. Nếu người thợ đang cắt tóc,
và vẫn còn ghế trống thì khách hàng chọn 1 ghế ngồi đợi. Nếu người thợ
ngủ, thì khách hàng đánh thức anh ta. Viết chương trình để đồng bộ khách
hàng và thợ cắt tóc.
2. Phân tích
Tiệm có lúc vắng, lúc nhiều khách. Thợ nên ngủ khi không có khách.
Nếu được đánh thức, thợ sẽ mời từng khách đến ghế cắt và cắt tóc cho
khách cho đến khi hết khách, thợ lại tiếp tục ngủ.
Khi đến tiệm, nếu thấy còn ghế chờ, khách sẽ ngồi vào 1 ghế, đánh

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG


thức thợ rồi ngủ ngay. Khi nào thợ đánh thức và mời đến ghế cắt thì
khách thức dậy và đến ngồi vào ghế cắt rồi ngủ chờ thợ cắt xong, trả
tiền và ra về.
(Hình 1 minh họa Sleeping Barber Problem)

3. Sơ đồ bài toán
(Hình 2 Mô hình bài toán thợ cắt tóc)

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

4. Triển Khai
Class Barber.java class tạo các tiến trình của thợ cắt tóc.
Class Customer.java class tạo các tiến trình của customer.
Class Display.java: class xây dựng giao diện.
Class App.java: class tạo đối tượng chạy chương trình.
5. Kết Quả
(Hình 3 Giao diện chương trình )

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

IV.


CƠ SỞ NGÀNH MẠNG

Kết luận và hướng phát triển
1. Kết quả đạt được
Thông qua đồ án này em đã hiểu hơn về cách các tiến trình giao tiếp với nhau,
hiểu về các giải pháp để đồng bộ giữa các tiến trình.
Bên cạnh những mặt đã đạt được ở trên, trong quá trình làm đồ án chúng em đã
học thêm được nhiều kiến thức bổ ích về hệ điều hành cũng như việc áp dụng
giải pháp semaphore phát triển dựa trên ngôn ngữ lập trình Java.
2. Hướng phát triển
Giải quyết bài toán Sleeping Barber Problem bằng các giải pháp đồng bộ khác.

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

PHẦN 2: LẬP TRÌNH MẠNG
Đề tài: Xây dựng ứng dụng chat đa phương tiện
Giới thiệu: Ngày nay, những ứng dụng realtime như mạng xã hội, chat, game
online,… đang ngày càng phát triển thì công nghệ realtime luôn được ưa chuộng
hơn bao giờ hết. Một trong những công nghệ phục vụ realtime mạnh mẽ nhất trong
đó phải kể đến NodeJs và Socket.io. Trong phạm vi đồ án em đã xây dựng một
ứng dụng chat realtime nhỏ trên Android.
V.

Cơ sở lý thuyết

Node.js Socket.io
NodeJS là ngôn ngữ lập trình mã nguồn mở, ngôn ngữ lập trình phía server,
bắt đầu được phát triển từ năm 2009, là nền tảng cho việc xây dựng các ứng
dụng web. Mặc dù NodeJS không phải là một JavaScript framework nhưng
hầu hết các module của nó được viết bằng JavaScript.
Hoạt động với một luồng duy nhất và có khả năng asynchronous (bất đồng
bộ).
(Hình 4 Mô hình hoạt động của Server Node.js)

Socket.io cung cấp cho lập trình viên các đặc trưng như event, room và tự
động phục hồi lại kết nối.
Khi client muốn kết nối tới Socket.io server, nó sẽ gửi cho server một
“handshake HTTP request”. Server sẽ phân tích request đó với những thông
tin cần thiết trong suốt quá trình kết nối. Nó sẽ tìm cấu hình của
middleware mà đã được đăng ký với server và thực thi chúng trước khi đưa
ra sự kiện kết nối. Khi kết nối thành công thì connection event listener được

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

thực thi, tạo ra một instance mới của socket có thể coi như định danh của
client mà mỗi một client kết nối tới sẽ có 1 định danh.
(Hình 5 Mô hình chat realtime sử dụng socket.io)

Socket.io gồm 2 phần:
Client: gồm bộ thư viện viết cho web(JavaScript), iOS, Android

Server: gồm bộ thư viện viết cho Nodejs
Cơ chế hoạt động của một ứng dụng realtime đó là thông qua server để lắng
nghe (listen) data và truyền data về các máy client.
VI.

Phân tích hệ thống
1. Mô hình ứng dụng
(Hình 6 Mô hình hoạt động ứng dụng)

-

Phía server sẻ liên tục lắng nghe kết nối từ các client, và sẻ gọi
socket.on để trả thông điệp về phía client.
Máy client gửi thông điệp lên server bằng sự kiện socket.emit,
client lắng nghe thông điệp từ server và sử lý sự kiện tương ứng.

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

2. Mô hình use case ứng dụng

(Hình 7 Sơ đồ usecase ứng dụng)

Các chức năng của ứng dụng:
Gửi tin nhắn dạng văn bản, hình ảnh, âm thanh.
Người dùng có thể biết tên user người gửi tin nhắn đến, và trạng thái đang

gõ bàn phím.
Tất cả dữ liệu gửi lên server và gửi về client đều ở dạng JSONObject.
Với dữ liệu dạng hình ảnh, máy client sẻ chuyển dữ liệu ảnh sang dạng byte
sau đó đóng gói vào một JSONObject rồi gửi lên server. Máy nhận sẻ giải
mã ngược dạng byte sang dạng bitmap và hiển thị ra màn hình.
Với dữ liệu âm thanh máy gửi sẻ chuyển dữ liệu .mp3 sang byte trước khi
gửi lên server. Máy nhận sẻ giải mã sang dạng .mp3 rồi phát lên cho người
dùng.

VII.

Triển khai và đánh giá kết quả
1. Màn hình giao diện

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

Màn hình login, có thể đăng nhập với một username bất kì.

(Hình 8 Giao diện Login)

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN


Màn hình sau khi Login.

(Hình 9 Giao diện chat)

Sau khi gửi ảnh.

(Hình 10 Kết quả gửi ảnh)

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG

CƠ SỞ NGÀNH MẠNG


BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

Giao diện nhập tin nhắn âm thanh.
Sau khi người gửi,gửi tin nhắn âm thanh, bên máy nhận lập tức sẻ phát âm
thanh ra.

(Hình 11 Giao diện gửi âm thanh)

VIII.

Kết luận và hướng phát triển
1. Kết quả đạt được
Về mặt lý thuyết, hiểu được cách hoạt động của một ứng dụng realtime,
biết thêm những kiến thức về node.js, socket.io và lập trình andoird.
Về mặt thực tiễn,ứng dụng đã hoạt động và chạy được các chức năng

gửi tin nhắn văn bản, hình ảnh, âm thanh, xác định được có người đang
gõ tin nhắn, biết được tên username gửi tin nhắn.
Tuy nhiên còn nhiều mặt hạn chế như:
- Ứng dụng chưa có chức năng gửi emotion, ảnh động gif, gửi
nhận video.
- Giao điện chưa bắt mắt, sơ sài…
2. Hướng phát triển

DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG


BÁO CÁO ĐỒ ÁN

CƠ SỞ NGÀNH MẠNG

Bổ sung thêm các chức năng còn thiếu đã nêu trên.

Trần Hồ Thuỷ Tiên, Bài giảng Nguyên lý hệ điều hành, Khoa CNTT trường Đại học
Bách khoa Đà nẵng.
Internet.
a/p/xay-dung-ung-dung-chat-tren-android-voi-nodejs-va-socketio-phan-2djeZ1VDjlWz
/>
DƯƠNG VĂN TRANG – 102150205 – ĐHBK ĐH ĐÀ NẴNG



×