1.2 Phương pháp, kết quả1.2.1 Sử dụng Công nghệ webRTC WebRTC Web Real-Time Communication là một web API được phát triển bởi Google, Mozilla, Opera và một số đơn vị khác nữa, khả năng h
Trang 1ĐẠI HỌC ĐÀ NẴNG KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
ĐỒ ÁN CƠ SỞ 4
VỚI CÔNG NGHỆ WEB RTC VÀ
NODEJS
Sinh viên thực hiện : NGUYỄN NGỌC HIỀN
HOÀNG THỊ HỒNG NHUNG Giảng viên hướng dẫn : NGUYỄN ĐỨC HIỂN
Lớp : 17IT2
Đà nẵng, tháng 01 năm 2020
1
Trang 2ĐẠI HỌC ĐÀ NẴNG KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
ĐỒ ÁN CƠ SỞ 4
VỚI CÔNG NGHỆ WEB RTC VÀ NODEJS
Đà Nẵng, tháng 01 năm 2020
Trang 3MỞ ĐẦU
1
Đã là sản phẩm đồ án thứ 4, nhóm mong muốn thực hiện một dự án mang tínhthiết thực và gần gũi với thực tế Cho dù sự phát triển mạnh mẽ của smartphone trongđời sống hiện tại nhóm vẫn hướng đến giải pháp web Với mong muốn tối ưu hóa tiệních web sản phẩm lần này được xây dựng trên nền tảng web RTC Các công ty viễnthông gần như mất đi vị trí của mình vì sự đi lên mạnh mẽ của internet Các cuộc gọihay tin nhắn được thực hiện bằng mạng xã hội Người dùng cho rằng họ thấy tiện lợi
và tiết kiệm rất nhiều khi sử dụng mạng internet mà không có một giới hạn nào cả.Bên cạnh đó vẫn có một vài ý kiến trái chiều cho rằng việc quá dễ dàng cho truy cập
và kết nối liệu có đảm bảo yêu cầu bảo mật nếu như có một vài thông tin nội bộ quantrọng
Trong quá trình thực hiện dự án nhóm đã đưa ra nhiều giả thiết và tìm hướnggiải quyết Tuy vậy vẫn chưa thể đảm bảo sản phẩm hoàn thiện như yêu cầu đặt ra.Sản phẩm ra đời với kì vọng của nhóm là phát triển đưa vào hoạt động thực tế Vì vậycũng đã đề ra một vài chiến lược phát triển về cả chất lượng và quảng cáo
Hy vọng với sự nỗ lực thực hiện của nhóm sản phẩm sẽ nhận được nhữngnhận xét và góp ý để hoàn thiện hơn nữa
Trang 4
LỜI CẢM ƠN
Trong quá trình nhóm sinh viên thực hiện dự án đã gặp không ít khó khăn từ khâuphát triển ý tưởng cũng như quá trình thực hiện dự án Tuy vậy nhóm đã nhận được sựgiúp đỡ, hướng dẫn từ các thầy cô giáo là giảng viên Khoa Công nghệ thông tin và truyềnthông Đặc biệt là sự dẫn dắt của thầy giáo Nguyễn Đức Hiển giảng viên hướng dẫn Quacác tuần đều có sự theo dõi và hướng dẫn của thầy trong từng chi tiết sản phẩm
Nhóm sinh viên xin gửi lời cảm ơn chân thành đến thầy, nhờ sự chỉ đạo sát sao củathầy mà sản phẩm của nhóm đã đạt được nhiều kết quả, phù hợp với nhu cầu thực tế cũngnhư định hướng đã đặt ra
Trang 5NHẬN XÉT
(của giảng viên hướng dẫn)
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
3
Trang 6
MỤC LỤC Chương 1 Giới thiệu 8
1.1 Tổng quan 8
1.1.1 Bối cảnh thực hiện đề tài 8
1.1.2 Vấn đề cần giải quyết 8
1.1.3 Đề xuất nội dung thực hiện 8
1.2 Phương pháp, kết quả 9
1.2.1 Sử dụng Công nghệ webRTC 9
1.2.2 Lập trình Node.js 9
1.2.3 Kết quả 9
Chương 2 Nghiên cứu tổng quan 10
2.1 Các phương pháp 10
2.1.1 Sử dụng Công nghệ webRTC 10
2.1.2 Lập trình Node.js 12
2.2 Hạn chế, tồn tại của các phương pháp 13
2.2.1 Sử dụng Công nghệ webRTC 13
2.2.2 Sử dụng Node.js 13
2.3 Phân tích thiết kế hệ thống 15
2.3.1 Mô tả bài toán 15
2.3.2 Phân tích chức năng 15
2.4 Thiết kế cơ sở dữ liệu 15
Chương 3 Triển khai xây dựng 16
3.1 Quy trình thực hiện 16
3.2 Công cụ thực hiện 16
3.2.1 StarUML 16
3.2.2 Mokup 19
3.2.3 MySQL 20
3.2.4 Visual studio code 21
Chương 4 Kết luận và Hướng phát triển 23
4.1 Kết luận 23
4.1.1 Đã đạt được 23
4.1.2 Chưa đạt được 23
4.2 Hướng phát triển 23
Trang 7DANH MỤC HÌNH
Trang
Hình 1: Data tranfer 10
Hình 2: Network Address Translation 11
Hình 3: Direct Media 11
Hình 4: Mô hình UML 17
Hình 5: Giao diện UML 18
Hình 6: mySQL 20
Hình 7: Tính năng của Visual Studio Code 22
5
Trang 8Chương 1 Giới thiệu
1.1 Tổng quan
1.1.1 Bối cảnh thực hiện đề tài
Sự trao đổi thông tin tràn lan trên các mạng xã hội, không giới hạn tài khoảncũng như nội dung, về hình thức ngày càng được đa dạng hóa
Nhiều ý kiến cho rằng việc không kiểm soát nội dung sẽ không đảm bảo vấn
đề an ninh mạng đặc biệt là các cuộc trao đổi mang tính chất nghiêm trọng thuộc vềyêu cầu công việc
Mạng xã hội mở rộng về quy mô và cách thức, việc tận dụng internet có sẳn từnhu cầu của người dùng sẽ là một điểm cộng cho vấn đề tối ưu hóa cách tiếp cậnngười dùng
Call video không chỉ thực hiện cuộc gọi thông thường mà còn cho phép nhìnthấy hình ảnh của nhau Đặc biệt khi gọi nhóm thì người dùng sẽ dễ dàng biết ngườiđang nói là ai, thấy được cảm xúc hoặc hành động cử chỉ (ngôn ngữ hình thể)
Nhu cầu lưu lại lịch sử cuộc gọi, bản ghi âm hoặc phiên bản video cuộc gọi tạimáy khách
Cho thấy sự tối ưu của web so với smartphone, sự cạnh tranh khá là khậpkhiểng khi đặt lợi ích của người dùng lên trên hết
1.1.3 Đề xuất nội dung thực hiện
Xây dựng các chức năng dựa trên ca sử dụng, bám sát đề bài
Thiết kế cơ sở dữ liệu cho phép lưu trữ thông tin rõ ràng cụ thể, chia hệ thốngthành máy chủ và máy khách
Trang 91.2 Phương pháp, kết quả
1.2.1 Sử dụng Công nghệ webRTC
WebRTC ( Web Real-Time Communication) là một web API được phát triển bởi
Google, Mozilla, Opera và một số đơn vị khác nữa, khả năng hỗ trợ trình duyệt
(browser) giao tiếp với nhau thông qua VideoCall, VoiceCall hay transfer
data “Peer-to-Peer” (P2P) mà không cần browser phải cài thêm plugins hay phầnmềm hỗ trợ nào từ bên ngoài
1.2.2 Lập trình Node.js
Node.js là một nền tảng chạy trên môi trường V8 JavaScript runtime - mộttrình thông dịch JavaScript cực nhanh chạy trên trình duyệt Chrome Bình thường thìbạn cũng có thể tải bộ V8 và nhúng nó vào bất cứ thứ gì Node.js làm điều đó đối vớicác web server
1.2.3 Kết quả
Kết hợp cả hai phương pháp để đạt hiệu quả tối ưu cho sản phẩm tuy vậy vẫncòn nhiều nhược điểm chưa thể khắc phục
7
Trang 10Chương 2 Nghiên cứu tổng quan
2.1 Các phương pháp
2.1.1 Sử dụng Công nghệ webRTC
Cách hoạt động của webRTC
Trong mô hình hoạt động của các web truyền thống mô hình client-server, cácđiều khiển,security,truyền tải dữ liệu sẽ do toàn bộ server đảm nhiệm Tuy nhiên khimang mô hình này vào các ứng dụng thời gian thực sẽ ảnh hưởng tới hiệu năng rấtnhiều
Dữ liệu trao đổi giữa các client với một lượng rất lớn và liên tục Nếu dữ liệunày truyền thằng trực tiếp tới server để server truyền tải tới client thì sẽ xảy ra việcquá tải không chỉ dành cho server mà cho cả hệ thống mạng
Chất lượng dịch vụ QoS(Quality of service) Trong QoS dành cho các ứngdụng thời gian thực, có hai tham số cực kỳ quan trọng cần được giảm thiểu tối đa
là deplay (trễ client ) và jitter (trễ giữa các gói tin) Việc phải truyền tải toàn bộ dữliệu tới server và server tới client sẽ làm ra tăng các chỉ sổ này
Do đó, các ứng dụng thời gian thực cần phải giải quyết được các vấn đề trên
đây mô hình Peer-to-Peer (P2P), Mô hình này chia dữ liệu ra làm 2 nhánh một là
dữ liệu Signalling và Data Stream Các client sẽ nhận các Signalling điều khiển
từ server và tự giao tiếp với nhau bằng Data Stream:
Hình 1: Data tranfer
Một ví dụ cơ bản của mô hình này như sau: Anh A và Chị B muốn giao tiếp với nhau thì cần thực hiện :
Trang 11- Anh A sẽ gửi thông tin của mình bao gồm thông tin về ứng dụng, địa chỉ ip,port của mình tới server khi khởi động ứng dụng
- Anh A sẽ thực hiện một yêu cầu được kết nối với chị B server sẽ trả về các thông tin của chị B ,ứng dụng,thiết bị,port,ip, cho Anh A và thông báo cho chị B biết rằng mình có một yêu cầu giao tiếp
- 2 Người bắt đầu cuộc trò chuyện “trực tiếp” với nhau
Mặc dù “trực tiếp” nhưng cũng phải trải qua một hệ thống vô cùng phức tạp thông qua hệ thống mang, Ta sẽ tìm hiểu để có một cuộc gọi như trên chúng ta cần những gì
NAT (Network Address Translation)
Hình 2: Network Address Translation
- IP private và IP public chắc mọi người đã biết về cái này rồi nên mình
sẽ ko viết nhiều IPprivate là địa chỉ ip mà khi chúng ta kết nối vào một
các router nào đó sẽ được NAT để có thể kết nối mạng và được cấp IPprivate để kết nối với router, ipPublic là ip mà nhà mạng cung cấp chocác router đó trên thực tế khi ta thực hiện kết nối mỗi peer trên đây đều
sử dụng địa chỉ private
- Khi một máy tính gửi một thông tin tới một máy tính nào đó trêninternet thì gói tin đó gửi từ máy tính đến NAT và NAT sẽ gửi gói tinnày đi với IP public mà không phải IP của máy tính đó
STUN (Simple Traversal Of UDP Through NAT):
Hình 3: Direct Media
Để truyền tải được dữ liệu thì chúng ta sẽ thực hiện chuyển đổi từ IP
private->IP public để biết được gói tin sẽ đi đến đích nào ta cần phải biết được IPprivate của máy ta cần đến STUN
STUN server sẽ đóng vai trò trung gian giúp cho các peer có thể lấy được địa chỉ
của peer khác
9
Trang 12 TURN (Traversal Using NAT Relay):
Trong mô hình OSI, tại lớp vận chuyển (Transport layer) có hai giao thức nổi tiếng là TCP và UDP Trong khi UDP cung cấp khả năng vận chuyển nhanh nhất có thể thì TCP lại đảm bảo truyền tin cậy Hầu hết trong các ứng dụng thời gian thực, tín hiệu điều khiển sẽ sử dụng TCP trong khi dữ liệu sẽ truyền bằng UDP Tuy nhiên, UDP không phải là cơ chế truyền tin cậy, dễ làm tăng số lượng các gói tin bị mất (Packet lost), do vậy đôi khi TCP được ưu tiên sử dụng
Ở đây, dữ liệu thay vì được gửi trực tiếp tới các peer thì các peer sẽ gửi dữ liệutới các TURN server và TURN server sẽ đóng vai trò trung gian vận chuyển gói tin.Điều này nâng cao không những chất lượng dịch vụ của ứng dụng mà còn đảm bảo
an toàn thông tin khi truyền dẫn
Nhưng cái gì cũng có hai mặt đúng ko? bất lợi của TURN là chi phí sử dụng lớn, vì sẽ có một lưu lượng băng thông lớn được sử dụng đúng không nào? Nhất là với chất lượng full HD hay video HD nữa
ICE (Interactive Communication Establishment)
ICE nôm na dễ hiểu là một giao thức được cùng để thiết lập phiên media dựatrên UDP đi qua NAT một cách nhanh nhất
ICE sẽ tìm đường tốt nhất để kết nối giữa các peer, nó thử tất cả khả năng có thểkết nối một cách song song và lựa chọn con đường hiệu quả nhất (cướp ngân hànglàm giàu)
Đầu tiên nó sẽ cố gắng tạo ra một kết nối bằng cách sử dụng địa chỉ thu được từ
hệ điều hành và card mạng của thiết bị, nếu không thành công (có thể thiết bị đằngsau NAT) thì ICE sẽ lấy địa chỉ bên ngoài của thiết bị bằng cách sử dụng máy chủSTUN (nhưng đời có lúc không gặp may), nếu không thành công nữa thì nó sẽchuyển lưu lượng mạng qua một máy chủ chuyển tiếp là TURN
Để dễ nhớ ta có thể nghĩ là ICE xài STUN xong không được thì đi xài TURN
2.1.2 Lập trình Node.js
Node.js là gì
JavaScript chỉ là một ngôn ngữ lập trình phía client chạy trên trình duyệt, phảikhông? Nhưng điều này không còn đúng chút nào nữa Node.js là một cách để chạyJavaScript trên server; nhưng nó còn hơn thế nữa
Trong một môi trường server điển hình LAMP (Linux-Apache-MySQL-PHP),bạn có một web server là Apache hoặc NGINX nằm dưới, cùng với PHP chạy trên
nó Mỗi một kết nối tới server sẽ sinh ra một thread mới, và điều này khiến ứng dụngnhanh chóng trở nên chậm chạp hoặc quá tải - cách duy nhất để hỗ trợ nhiều ngườidùng hơn là bằng cách bổ sung thêm nhiều máy chủ Đơn giản là nó không có khảnăng mở rộng tốt Nhưng với Node.js thì điều này không phải là vấn đề Không cómột máy chủ Apache lắng nghe các kết nối tới và trả về mã trạng thái HTTP - bạn sẽphải tự quản lý kiến trúc lõi của máy chủ đó May mắn thay, có một số module giúpthực hiện điều này được dễ dàng hơn, nhưng công việc này vẫn gây cho bạn mộtchút khó khăn khi mới bắt đầu Tuy nhiên, kết quả thu được là một ứng dụng web cótốc độ thực thi cao
JavaScript là một ngôn ngữ dựa trên sự kiện, vì vậy bất cứ thứ gì xảy ra trên
server đều tạo ra một sự kiện non-blocking Mỗi kết nối mới sinh ra một sự kiện; dữ
Trang 13dữ liệu từ database cũng sinh ra một sự kiện Trong thực tế, điều này có nghĩa là mộttrang web Node.js sẽ chẳng bao giờ bị khóa (lock up) và có thể hỗ trợ cho hàng chụcnghìn user truy cập cùng lúc Node.js đóng vai trò của server - Apache - và thôngdịch mã ứng dụng chạy trên nó Giống như Apache, có rất nhiều module (thư viện)
có thể được cài đặt để bổ sung thêm các đặc trưng và chức năng - như lưu trữ dữliệu, hỗ trợ file Zip, đăng nhập bằng Facebook, hoặc các cổng thanh toán Dĩ nhiên,
nó không có nhiều thư viện như PHP, nhưng Node.js vẫn đang ở trong giai đoạn banđầu và có một cộng đồng rất mạnh mẽ ở đằng sau nó
Một khái niệm cốt lõi của Node.js đó là các function bất đồng bộ(asynchronous functions) - vì vậy về cơ bản thì mọi thứ chạy trên nền tảng này Vớihầu hết các ngôn ngữ kịch bản máy chủ, chương trình phải đợi mỗi function thực thixong trước khi có thể tiếp tục chạy tiếp Với Node.js, bạn xác định các function sẽchạy để hoàn thành một tác vụ nào đó, trong khi phần còn lại của ứng dụng vẫn chạyđồng thời Nó là một chủ đề phức tạp mà tôi sẽ không đi vào quá sâu trong bài viếtnày, nhưng đó là một trong những đặc trưng tiêu biểu của Node.js, vì vậy việc nắmvững nó là điều hết sức quan trọng Tuy nhiên tôi sẽ đưa ra một ví dụ Hello World đểmang lại cho bạn một cái nhìn thoáng qua một vài những khái niệm này
Tại sao lại sử dụng Node.js?
Đầu tiên là ưu điểm về tốc độ thực thi và khả năng mở rộng Node.js có tốc độrất nhanh Đó là một yêu cầu khá quan trọng khi bạn là một startup đang cố gắngtạo ra một sản phẩm lớn và muốn đảm bảo có thể mở rộng nhanh chóng, đáp ứngđược một lượng lớn người dùng khi trang web của bạn phát triển lên
Node.js có thể xử lý hàng ngàn kết nối đồng thời trong khi PHP sẽ chỉ có nướcsụp đổ Bên cạnh các lợi ích về tốc độ thực thi và khả năng mở rộng, có thể bạncũng đã biết một chút về JavaScript, vì vậy tại sao lại phải phiền toái để học thêm
về một ngôn ngữ lập trình hoàn toàn mới như PHP? Và sau đó bạn sẽ có một sựphấn khích khi học về một cái gì đó mới mẻ và gần như chưa được khám phá Bạncòn nhớ cái cảm giác khi mà một cái gì đó mới xuất hiện và sau đó trở thành phổbiến khắp mọi nơi mà bạn hối tiếc đã không học về nó sớm hơn, và mãi mãi chỉ làngười đến sau? Đừng phạm phải sai lầm như vậy lần này nữa Node.js đang ngàycàng trở nên lớn mạnh hơn
2.2 Hạn chế, tồn tại của các phương pháp
2.2.1 Sử dụng Công nghệ webRTC
11
Trang 142.2.2 Sử dụng Node.js
Giống như hầu hết các công nghệ mới, việc triển khai Node.js trên host khôngphải là điều dễ dàng Nếu bạn có một web hosting xài chung, bạn không thể đơngiản tải lên một ứng dụng Node.js và mong chờ nó hoạt động tốt VPS và dedicatedserver là một sự lựa chọn tốt hơn - bạn có thể cài đặt Node.js trên chúng Thậm chí
dễ hơn là sử dụng một dịch vụ có khả năng mở rộng như là Heroku, và bạn có thểhoàn toàn an tâm để phát triển trang web của mình trên đó - bạn chỉ cần trả tiền khicần thêm nhiều tài nguyên hơn
Mặt khác, chúng ta rất dễ cài đặt Node.js chạy cục bộ trên máy tính của bạn sửdụng các hệ điều hành như Windows, Mac hoặc Linux và bắt đầu phát triển ứngdụng ngay lập tức - chỉ việc tải phiên bản Node.js tương ứng tại đây Một điều quantrọng nên chú ý là Node.js không chỉ đơn giản là một sự thay thế cho Apache - cácứng dụng web đang tồn tại sẽ không có khả năng tương thích, và bạn sẽ làm việc
hiệu quả với những ứng dụng phát triển từ đầu (mặc dù có rất nhiều framework
ngoài kia để giúp đỡ bạn với nhiều đặc trưng phổ biến)
Một nhược điểm lớn khác của Node.js đó là nó vẫn đang trong giai đoạn pháttriển ban đầu, điều này có nghĩa là một số đặc trưng sẽ thay đổi trong quá trình pháttriển tiếp theo Trong thực tế, nếu bạn đọc các tài liệu đi kèm, thì nó bao gồm mộtchỉ số ổn định (stability index), chỉ số này cho thấy mức độ rủi ro khi bạn sử dụngcác đặc trưng hiện có