CHƯƠNG 1: CƠ SỞ LÝ THUYẾT 1. KOTLIN - Kotlin là một ngôn ngữ lập trình kiểu tĩnh chạy trên máy ảo Java (JVM) và có thể được biên dịch sang mã nguồn JavaScript hay sử dụng cơ sở hạ tầng trình biên dịch LLVM. Nó được tài trợ và phát triển bởi JetBrains. Mặc dù cú pháp không tương thích với Java, nhưng hiện thực JVM của thư viện chuẩn Kotlin được thiết kế để tương tác với mã Java và dựa vào mã Java từ Java Class Library có sẵn, ví dụ như collections framework.
Kotlin sử dụng suy luận kiểu một cách tích cực để xác định kiểu của giá trị và biểu thức vốn không được nêu rõ. Điều này giúp giảm tính dài dòng của ngôn ngữ so với Java, vốn thường đòi hỏi toàn bộ đặc kiểu một cách dư thừa mãi đến phiên bản 10. Mã Kotlin có thể chạy trên JVM đến phiên bản Java 11 mới nhất.[1] - Một số ưu điểm của Kotlin: Kotlin có khả năng tương thích cao với Java. Ngắn gọn hơn Java.
An toàn hơn Java: tránh được các lỗi null pointer. Kotlin hỗ trợ tốt hơn cho lập trình chức năng. TỔNG QUAN VỀ XMPP Extensible Messaging and Presence Protocol (XMPP) là một giao thức hiện diện và nhắn tin mở rộng, là một tập hợp công nghệ dùng cho việc nhắn tin tức thời, thông tin hiện diện, trò chuyện nhiều bên, thực hiện cuộc gọi thoại và video, cung cấp nội dung và định tuyến dữ liệu XML tổng quát. Một số lợi ích của XMPP: Miễn phí - các giao thức XMPP là miễn phí, mở, công khai và dễ hiểu.
Tiêu chuẩn - Lực lượng Chuyên trách về Kỹ thuật Liên mạng (Internet Engineering Task Force - IETF) đã chính thức thông báo các giao thức truyền phát XML là một công nghệ hiện diện và nhắn tin tức thời được thừa nhận. 4 do an Đã được chứng minh - các công nghệ Jabber / XMPP đầu tiên được phát triển bởi Jeremie Miller vào năm 1998 và hiện khá ổn định, hàng trăm nhà phát triển đang làm việc trên các công nghệ này và có hàng chục ngàn máy chủ XMPP đang chạy trên Internet ngày nay. Phân cấp - kiến trúc của mạng XMPP tương tự như email; kết quả là, bất kỳ ai cũng có thể chạy máy chủ XMPP của riêng họ, cho phép các cá nhân và tổ chức kiểm soát trải nghiệm liên lạc của họ. Bảo mật - mọi máy chủ XMPP có thể được cách ly khỏi mạng công cộng (ví dụ: trên mạng nội bộ của công ty) và bảo mật mạnh mẽ bằng cách sử dụng SASL và TLS đã được tích hợp vào các thông số kỹ thuật XMPP cốt lõi.
Ngoài ra, cộng đồng nhà phát triển XMPP đang tích cực làm việc về mã hóa đầu cuối để nâng cao bảo mật. Có thể mở rộng - bất kỳ ai cũng có thể xây dựng chức năng tùy chỉnh trên các giao thức cốt lõi. Linh hoạt - Các ứng dụng XMPP ngoài Instance Message bao gồm quản lý mạng, cung cấp nội dung, công cụ cộng tác, chia sẻ tệp, chơi trò chơi, giám sát hệ thống từ xa, dịch vụ web, phần mềm trung gian nhẹ, điện toán đám mây và nhiều hơn nữa. Phong phú - một loạt các công ty và các dự án nguồn mở sử dụng XMPP để xây dựng và triển khai các ứng dụng và dịch vụ thời gian thực.
TỔNG QUAN VỀ WEBRTC WebRTC (Web Real-Time Communication) là một web API được phát triển bởi World Wide Web Consortium (W3C), khả năng hỗ trợ trình duyệt (browser) giao tiếp với nhau thông qua Video Call, Voice Call hay transfer data "Peer-to-Peer" (P2P) mà không cần browser phải cài thêm plugins hay phần mềm hỗ trợ nào từ bên ngoài. WebRTC đã được hình thành ý tưởng từ những năm 2009 bởi nhóm kỹ sư Google Hangouts. Thay vì sử dụng Flash để truyền video, hình ảnh trên web, họ quyết định tự tạo ra một sản phẩm của riêng mình. Năm 2010, khi hai công ty On2 và Global IP Solutions(GIPS) chính thức bị Google thâu tóm, công nghệ truyền dữ liệu thời gian thực cũng được lấy làm nền tảng 5 do an cho WebRTC.
Đến tháng 5 năm 2011, dự án nguồn mở hỗ trợ giao tiếp thời gian thực giữa trình duyệt mang tên WebRTC mới chính thức được ra mắt. Cùng lúc đó, W3C và Hiệp Hội Kỹ Sư Quốc Tế(IETF) cũng phát triển các giao thức kết nối thời gian thực. Vì thế, họ đã quyết định bắt tay để cùng nhau xây dựng sản phẩm này. Tháng 10 năm 2011, phiên bản đầu tiên của WebRTC chính thức ra mắt, đến tháng 11, Chrome 23 ra đời và trở thành trình duyệt đầu tiên tích hợp sẵn WebRTC.
Tính năng nổi bật nhất của WebRTC chắc chắn chính là khả năng truyền tải video, âm thanh, gửi dữ liệu theo thời gian thực giữa hai hay nhiều thiết bị mà không qua trung gian, không cần cài thêm plugin. Một số lợi ích của WebRTC Mã nguồn mở miễn phí: WebRTC là một dự án mã nguồn mở miễn phí. Google cho biết đây là một công cụ truyền thông thời gian thực hoàn toàn miễn phí và có sẵn trên mọi trình duyệt. Hỗ trợ đa nền tảng: có thể sử dụng trên cả web và mobile Bảo mật voice và video: Giao thức SRTP (Secure Real-Time Transport Protocol) được dùng để mã hóa và xác thực dữ liệu media.
Chống lại các khả năng bị nghe trộm trong quá trình thực hiện tác vụ video hay voice. Không cần plugin hay phần mềm hỗ trợ: Yếu tố quan trọng giúp WebRTC được đánh giá rất cao chính là khả năng hoạt động không cần đến plugin bên thứ ba mang đến sự tiện lợi, tối ưu tốc độ, tiết kiệm chi phí,… Tương đối dễ sử dụng: WebRTC có thể được tích hợp trong các dịch vụ web bằng cách dùng JavaScript APIs, các Framework có sẵn. Sử dụng bằng thông hiệu quả: Hỗ trợ nhiều kiểu media và các thiết bị đầu cuối khác nhau, WebRTC sử dụng băng thông hiệu quả hơn, hoạt động tốt trong mọi điều kiện đường truyền mạng. Tổng quan Node.js là một hệ thống phần mềm được thiết kế để viết các ứng dụng internet có khả năng mở rộng, đặc biệt là máy chủ web.
Chương trình được viết bằng JavaScript, sử dụng kỹ thuật điều khiển theo sự kiện, nhập/xuất không đồng bộ để tối tiểu tổng chi 6 do an phí và tối đại khả năng mở rộng.js bao gồm có V8 JavaScript engine của Google, libUV, và vài thư viện khác.js được tạo bởi Ryan Dahl từ năm 2009, và phát triển dưới sự bảo trợ của Joyent. [1] Mục tiêu ban đầu của Dahl là làm cho trang web có khả năng push như trong một số ứng dụng web như Gmail. Sau khi thử với vài ngôn ngữ Dahl chọn Javascript vì một API Nhập/Xuất không đầy đủ. Điều này cho phép anh có thể định nghĩa một quy ước Nhập/Xuất điểu khiển theo sự kiện, non-blocking.
[1] Vài môi trường tương tự được viết trong các ngôn ngữ khác bao gồm Twisted cho Python, Perl Object Environment cho Perl, libevent cho C và EventMachine cho Ruby. Khác với hầu hết các chương trình Javascript, Nodejs không chạy trên một trình duyệt mà chạy trên Server.js sử dụng nhiều chi tiết kỹ thuật của CommonJS.[6] Nó cung cấp một môi trường REPL cho kiểm thử tương tác.js được InfoWorld bình chọn là "Công nghệ của năm" năm 2012. [1] Một số khái niệm trong Nodejs. Event: NodeJS hỗ trợ các sự kiện trong các ứng dụng rất hoàn hảo.
Mỗi hành động trong máy tính được gọi là 1 sự kiện (event). NodeJS sử dụng quy tắc FIFO (First In First Out), điều này có nghĩa là những yêu cầu đến trước sẽ được xử lý trước. [1] Callbacks: Máy chủ NodeJS có thể nhận rất nhiều các yêu cầu (request) từ rất nhiều người dùng. Vì vậy để nâng cao khả năng phục vụ, tất cả các API của NodeJS được thiết kế hỗ trợ Callback.
"callback" là môt hàm (function), nó sẽ được gọi khi NodeJs hoàn thành một tác vụ (task) cụ thể. [1] Message: nội dung thông báo tương ứng với từng Callbacks. [1] Blocking I/O: là cơ chế được ứng dụng trong phân lớn các ngôn ngữ server-side, cơ chế này quản lý các request đến server và lân lượt cho thưc hiện yêu câu của request tiếp theo khi request đang xử lý đã hoàn thành. Từ đây dễ thấy được 7 do an rằng nếu các yêu câu xử lý của request đến sớm tiêu tốn nhiều thời gian thì các request đến sau bắt buộc phải đợi toàn bộ thời gian xử lý này.
Với NodeJS việc quản lý các request yêu câu được thay thế bằng cơ chế xử lý Non-Blocking I/O để giải quyết vấn đề thời gian chờ nêu trên. [1] Thread Pool: là một chương trình viết bằng ngôn ngữ C++ được tích hợp bên trong NodeJS, chương trình này cho phép xử lý đa luồng. Đây chính là môi trường xử lý chính cho tất cả tác vụ được server NodeJS xử lý và các tác vụ này cũng được xử lý trên các luồng khác nhau. [1] Event Loop: là một vòng lặp vô tận, nó chuyển các yêu câu đã nhận sang Thread Pool, đồng thời mỗi một yêu câu cũng được tư động đăng ký một Callback, khi yêu câu được xử lý xong hàm Callback tương ứng sẽ được thưc thi.
Nguyên tắc hoạt động của cơ chế bất đồng bộ [3] Bất đồng bộ(Asynchronous): Không theo thứ tự, các hành động có thể xảy ra đồng thời hoặc chí ít, mặc dù các hành động bắt đầu theo thứ tự nhưng kết thúc thì không. Một hành động có thể bắt đầu (và thậm chí kết thúc) trước khi hành động trước đó hoàn thành. Vì thế, trong thời gian chờ kết quả trả về nó vẫn hoạt động do đó cơ chế xử lý bất đồng bộ tối ưu được thời gian xử lý. 1: Nguyên tắc hoạt động của cơ chế bất đồng bộ 8 do an Heap : là vùng nhớ được dùng để chưa kết quả tạm phục vụ cho việc thực thi các hàm trong stack.
Heap càng lớn thì khả năng tính toán càng cao. Stack: là một vùng nhớ đặc biệt trên con chip máy tính phục vụ cho quá trình thực thi các dòng lệnh mà cụ thể là các hàm. Hàm chẳng qua là một nhóm các lệnh và chương trình thì gồm một nhóm các hàm phối hợp với nhau. Mỗi khi một hàm được triệu gọi thì nó sẽ được đẩy vào một hàng đợi đặc biệt có tên là stack.
Stack là một hàng đợi kiểu LIFO (Last In First Out) nghĩa là vào đầu tiên thì ra sau cùng. Một hàm chỉ được lấy ra khỏi stack khi nó hoàn thành và return. Js runtime engine là khu thực thi câu lệnh js gồm Heap và stack. Web APIs là nơi chức các tác vụ được cung cấp bởi trình duyệt.
Callback queue: là hàng đợi công việc kiểu FIFO(first in first out). Vào trước ra trước. Event Loop: là đọc Stack và Event Queue.