Chương 1: CƠ SỞ LÝ THUYẾT 1. Giới thiệu về ngôn ngữ lập trình 1.1 Ngôn ngữ lập trình 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 thiểu tổng chi 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. 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 định nghĩa một quy ước Nhập/Xuất điểu khiển theo sự kiện, non-blocking. 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, node.js 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.
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. Để bắt đầu dùng Node.js, phải hiểu sự khác nhau giữa node.js với các môi trường truyền thống chạy trên server (server side) phổ biến như PHP, Python, Ruby, etc Node.js là một mã nguồn được xây dựng dựa trên nền tảng Javascript V8 Engine, nó được sử dụng để xây dựng các ứng dụng web như các trang video clip, các forum và đặc biệt là trang mạng xã hội phạm vi hẹp.js là một mã nguồn mở được sử dụng rộng bởi hàng ngàn lập trình viên trên toàn thế giới.js có thể chạy trên nhiều nền tảng hệ điều hành khác nhau từ WIndow cho tới Linux, OS X nên đó cũng là một lợi thế.js cung cấp các thư viện phong phú ở dạng Javascript Module khác nhau giúp đơn giản hóa việc lập trình và giảm thời gian ở mức thấp nhất. Các đặc tính của node.js: 3 • Không đồng bộ: Tất cả các API của node.js đều không đồng bộ (none- blocking), nó chủ yếu dựa trên nền của node.js Server và chờ đợi Server trả dữ liệu về. Việc di chuyển máy chủ đến các API tiếp theo sau khi gọi và cơ chế thông báo các sự kiện của node.js giúp máy chủ để có được một phản ứng từ các cuộc gọi API trước (Realtime).
• Thực thi chương trình rất nhanh: Node.js được xây dựng dựa vào nền tảng V8 Javascript Engine nên việc thực thi chương trình rất nhanh. • Đơn luồng nhưng khả năng mở rộng cao: Node.js sử dụng một mô hình luồng duy nhất với sự kiện lặp.js sử dụng một chương trình đơn luồng và các chương trình tương tự có thể cung cấp dịch vụ cho một số lượng lớn hơn nhiều so với yêu cầu máy chủ truyền thống như Apache HTTP Server. • Không đệm: Node.js không đệm bất kì một dữ liệu nào và các ứng dụng này chủ yếu là đầu ra dữ liệu. • Có giấy phép: Node.js đã được cấp giấy phép bởi MIT License.js chỉ là môi trường Node.js chỉ là môi trường – điều đó có nghĩa là phải tự làm tất cả.
Đó không phải là một server http ngầm định hoặc là bất cứ server nào khác. Điều này có thể là hơi khó hiểu với người mới, nhưng thành công thực sự của nó là đưa lại một hiệu năng đáng kinh ngạc. Một scrips có thể điều phối mọi kết nối với các client. Điều này làm sử dụng ít tài nguyên đưa đến một hiệu quả rất cao.
Và giờ ta xem chấm điểm benchmark cho hai đoạn code trên khi chạy trên hai môi trường khác nhau: Number of iterations Node.19 Thực hiện chạy hai đoạn code trên từ command line (console command) nên không có trễ thao tác thực thi. Chạy từng thử nghiệm 10 lần và lấy kết quả trung bình. PHP nhanh hơn trong các lần chạy với số lượng nhỏ vòng lặp. Nhưng vấn đề thay đổi khi số lượng vòng lặp tăng lên, số lần xử lý tăng lên thì PHP chạy chậm hơn rất nhiều 4 trong khi Node.js có tốc độ đáng kinh ngạc.
Sau tất cả thao tác, PHP chậm hơn 93% so với Node.js sử dụng một kiến trúc mô-đun để đơn giản hóa việc tạo ra các ứng dụng phức tạp. Mô-đun giống như các thư viện trong C, hoặc các đơn vị trong Pascal. Mỗi module có chứa một tập hợp các chức năng liên quan đến "đối tượng" của các mô-đun. Ví dụ, các mô-đun http chứa các chức năng cụ thể cho HTTP.js cung cấp một vài mô-đun cơ bản để giúp bạn truy cập các tập tin trên hệ thống tập tin, tạo ra trình điều khiển server HTTP và TCP / UDP và thực hiện các chức năng hữu ích khác.
Để gọi một modul thật dễ dàng, chỉ cần gọi hàm require() như sau var http = require(‘http’); Hàm require() trả về tham chiếu đến các module quy định. Trong trường hợp của mã này, một tham chiếu đến các module http được lưu trữ trong biến http. Trong đoạn code trên đã truyền tên của module vào trong hàm require(). Việc này chỉ định cho Node.js tìm trong thư mục node_modules module tương ứng để thực hiện.
Nếu Node không thấy module tương ứng trong thư mục thì nó sẽ tìm trên global module cache, cũng có thể chỉ định một module qua một file vật lý qua đường dẫn tương đối hay tuyệt đối như sau: var myModule = require('.js'); Module được đóng gói từng phần mã. Đoạn mã nằm trong một mô-đun chủ yếu là private - có nghĩa là các chức năng và biến được định nghĩa trong họ chỉ có thể truy cập từ bên trong của các mô-đun. Tuy nhiên có thể tiếp xúc với chức năng và / hoặc các biến được sử dụng từ bên ngoài của mô-đun. Để làm như vậy, phải sử dụng các đối tượng export với các thuộc tính và phương thức của nó với từng phần mã mà bạn muốn gọi từ bên ngoài.
Hãy xem xét các modul ví dụ sau đây: var PI = Math.area = function (r) { return PI * r * r; }; exports.circumference = function (r) { return 2 * PI * r; }; 5 Trong ví dụ này PI là biến private và chỉ được sử dụng bên trong đoạn mã, trong đó có hai hàm area() và circumference() được từ khóa exports chỉ định thì sẽ có thể truy cập được từ bên ngoài. Global Scope Node là một môi trường chạy javascrip với google V8 engine do đó hỗ trợ chạy được ở server side. Do đó nên tuân thủ các kinh nghiệm có trong lập trình với các ứng dụng client-side. Ví dụ khi tạo các biến global trong Node không phải lúc nào cũng có thể tạo.
Nhưng có thể tạo dễ dàng các biến hoặc hàm global với cách bỏ từ khóa var trước các biến như sau: globalVariable = 1; globalFunction = function () {. }; Nhưng các biến global nên tránh sử dụng, và lưu ý khi khai báo biến thì dùng từ khóa var để thực hiện.js Cài đặt node thì rất là đơn giản là người sử dụng window hay linux thì trên website nodejs.org đều đã có những bộ cài tương ứng chỉ cần download về và cài đặt như thông thường. Với linux thì sử dụng package manager, bật cửa sổ terminal và type: sudo apt-get update sudo apt-get install node Hoặc: sudo aptitude update sudo aptitude install node Bạn có thể cần thêm Node.js vào danh sách mã nguồn bằng lệnh sau: sudo echo deb sid main > /etc/apt/ sources.list Cẩn trọng khi cài sid packages trên những hệ thống cũ hơn có thể làm hệ thống bị ảnh hưởng, hay cẩn thận và remove /etc/apt/sources.list sau khi bạn cài xong node. Installing New Modules Node.js có một ứng dụng quản lý packages, đó là node.
Ứng dụng này tự động được cài đặt khi bạn cài Node.js và dùng NPM để cài đặt các module khác. Để cài đặt một module, bạn mở cửa sổ command line của nodejs ra, vào đường dẫn tương ứng và nhập lệnh: npm install module_name 6 Không phụ thuộc vào hệ điều hành, lệnh trên sẽ cài module mong muốn chỉ định.2 Hệ quản trị cơ sở dữ liệu PostgreSQL 1. Khái niệm mã nguồn mở Mã nguồn mở hiểu theo nghĩa rộng là khái niệm chung được sử dụng cho tất cả các phần mềm mà mã nguồn của nó được công bố rộng rãi, công khai và cho phép mọi người tiếp tục phát triển phần mềm đó. Điều này không có nghĩa chúng được sao chép, sửa chữa thoải mái hay sử dụng vào mục đích nào cũng được.
Mã nguồn mở được công bố dưới rất nhiều điều kiện khác nhau, một số trong đó cho phép phát triển, sử dụng và bán tùy ý miễn là giữ nguyên các dòng về nguồn gốc sản phẩm, một số bắt buộc tất cả các sản phẩm làm ra từ đó cũng phải là Open Source, một số khác đòi hỏi phải công bố trọn vẹn mã nguồn, một số khác không cho phép sử dụng vào mục đích thương mại, một số khác lại không có ràng buộc nào đáng kể… Qua đó ta thấy khái niệm Open Source không thể chuẩn xác mà muốn nói đến tính pháp lý của việc sử dụng các phần mềm mã nguồn mở, chúng ta phải xem xét đến điều kiện sử dụng cụ thể mà dưới đó chúng được công bố. Một điều kiện hay được áp dụng nhất là GPL: GNU General Public Licence của tổ chức Free Software Foundation. GPL có hai đặc điểm phân biệt đó là: • Tác giả gốc giữ bản quyền về phần mềm nhưng cho phép người dùng có nhiều quyền, trong đó có quyền tìm hiểu, phát triển, công bố cũng như quyền khai thác thương mại sản phẩm. • Đặc điểm thứ hai thường được gọi là hiệu ứng virut (virus effect) vì nó biến tất cả các phần mềm có dùng mã nguồn GPL cũng biến thành phần mềm GPL.
Trên thực tế điều này có nghĩa: bất kì tác giả nào sử dụng dù chỉ một phần rất nhỏ mã nguồn GPL trong chương trình của mình, cũng phải công bố dưới điều kiện GPL. Các điều khoản phân phối của phần mềm mã nguồn mở phải tuân thủ các tiêu chuẩn sau: • Tự do tái phân phối. • Các phần mềm phải có nguồn gốc. • Tính toàn vẹn của mã nguồn cung cấp bởi tác giả.
7 • Không có sự phân biệt giữa cá nhân hay nhóm người. • Không phân biệt bất cứ một lĩnh vực nào. • Việc phân phối bản quyền. • Giấy phép không được dành riêng cho một sản phẩm.
• Giấy phép không được hạn chế các phần mềm khác. Lợi ích của mã nguồn mở Phần mềm có thể được sao chép hoàn toàn miễn phí, người dùng hoàn toàn an tâm khi chia sẻ một chương trình tốt với bạn bè.