Framework Laravel

Framework Laravel là một trong những framework rất phổ biến cho việc phát triển website

Packages/Modules

Tổ chức Project Laravel theo dạng Packages/Modules

Thứ Năm, 24 tháng 7, 2025

Giới Thiệu Gumroad và Cơ Hội Đăng Ký Nội Dung Đặc Biệt Của Tôi

    


Trong thế giới kỹ thuật số ngày nay, việc dễ dàng tiếp cận các tài nguyên học tập và công cụ hỗ trợ là rất quan trọng. Đó chính là lý do tại sao tôi muốn giới thiệu đến bạn nền tảng Gumroad – nơi bạn có thể dễ dàng đăng ký và tiếp cận những nội dung đặc biệt, tài nguyên học tập, và các công cụ hữu ích mà tôi đã cẩn thận chọn lọc và chuẩn bị.

Gumroad Là Gì?

Gumroad là một nền tảng trực tuyến giúp người sáng tạo nội dung, nhà phát triển, và các chuyên gia chia sẻ và bán sản phẩm số. Đây là nơi lý tưởng cho các tác giả, nhà thiết kế, lập trình viên, và những người đam mê chia sẻ kiến thức với cộng đồng một cách dễ dàng và nhanh chóng. Trên Gumroad, bạn có thể tìm thấy các sản phẩm như sách điện tử, khóa học, hướng dẫn chi tiết, mẫu tài liệu, phần mềm và nhiều loại sản phẩm số khác.

Với Gumroad, bạn có thể:

  • Tải về các tài nguyên số ngay lập tức sau khi thanh toán hoặc đăng ký.

  • Nhận các bản cập nhật thường xuyên về sản phẩm, công cụ, và nội dung mới nhất.

  • Trải nghiệm sự đơn giản, dễ dàng trong quá trình giao dịch và truy cập tài nguyên.

Tại Sao Nên Đăng Ký Trên Gumroad?

Đăng ký trên Gumroad mang lại rất nhiều lợi ích, đặc biệt nếu bạn đang tìm kiếm các tài nguyên chất lượng, kiến thức chuyên sâu, và các công cụ giúp bạn tiến xa hơn trong công việc hoặc học tập.

Với dịch vụ đăng ký của tôi trên Gumroad, bạn sẽ được tiếp cận với:

  • Nội Dung Đặc Biệt: Các bài viết chuyên sâu, tài liệu hướng dẫn, và công cụ hữu ích được tôi lựa chọn kỹ lưỡng để giúp bạn giải quyết các vấn đề công nghệ, tự động hóa, và phát triển nghề nghiệp.

  • Cập Nhật Liên Tục: Bạn sẽ nhận được các thông báo ngay khi có tài liệu, hướng dẫn, hoặc công cụ mới được phát hành, giúp bạn luôn bắt kịp các xu hướng và công nghệ mới.

  • Hỗ Trợ Cá Nhân: Là một phần của cộng đồng Gumroad, bạn sẽ có quyền truy cập vào sự hỗ trợ nhanh chóng từ tôi, giải đáp mọi thắc mắc và giúp đỡ bạn khi cần thiết.

Cách Đăng Ký

Việc đăng ký rất đơn giản và chỉ mất vài phút. Bạn chỉ cần:

  1. Truy cập vào Gumroad của tôi tại Đây.

  2. Chọn gói đăng ký phù hợp với nhu cầu của bạn.

  3. Nhận ngay quyền truy cập vào các tài nguyên và nội dung đặc biệt.

Hãy nhanh tay đăng ký để không bỏ lỡ cơ hội nhận các tài nguyên và nội dung độc quyền này!

Thứ Sáu, 20 tháng 12, 2024

Hướng dẫn cài đặt Mariadb trên Ubuntu

 


Bước 1: Cập nhật hệ thống

Trước khi cài đặt MariaDB, hãy cập nhật danh sách gói:


sudo apt update && sudo apt upgrade -y

Bước 2: Cài đặt MariaDB

MariaDB đã có sẵn trong kho phần mềm mặc định của Ubuntu. Cài đặt bằng lệnh:


sudo apt install mariadb-server -y

Bước 3: Bảo mật cài đặt MariaDB

Chạy lệnh mysql_secure_installation để bảo mật MariaDB:


sudo mysql_secure_installation
  • Đặt mật khẩu root khi được yêu cầu.
  • Làm theo hướng dẫn để:
    • Xóa người dùng ẩn danh.
    • Không cho phép đăng nhập từ xa bằng tài khoản root.
    • Xóa cơ sở dữ liệu test.
  • Y (Yes) cho tất cả các câu hỏi.

Bước 4: Kiểm tra trạng thái MariaDB

Kiểm tra xem MariaDB có đang chạy hay không:


sudo systemctl status mariadb

Nếu MariaDB chưa chạy, khởi động dịch vụ:


sudo systemctl start mariadb

Để tự động khởi động MariaDB khi bật máy:


sudo systemctl enable mariadb

Bước 5: Đăng nhập vào MariaDB

Đăng nhập với tài khoản root:


sudo mysql -u root -p

Bước 6: Tạo cơ sở dữ liệu mới (Tùy chọn)

Để tạo cơ sở dữ liệu, sử dụng lệnh:


CREATE DATABASE ten_co_so_du_lieu;

Để tạo tài khoản người dùng và cấp quyền:


CREATE USER 'ten_nguoi_dung'@'localhost' IDENTIFIED BY 'mat_khau'; GRANT ALL PRIVILEGES ON ten_co_so_du_lieu.* TO 'ten_nguoi_dung'@'localhost'; FLUSH PRIVILEGES; EXIT;

Bước 7: Kiểm tra kết nối MariaDB

Kiểm tra bằng cách đăng nhập với tài khoản vừa tạo:


mysql -u ten_nguoi_dung -p

Bước 8: Cài đặt MariaDB Client (Tùy chọn)

Nếu cần cài đặt client MariaDB để kết nối từ máy khác:


sudo apt install mariadb-client -y

Hãy cho mình biết nếu bạn gặp bất kỳ vấn đề gì trong quá trình cài đặt!

Thứ Năm, 12 tháng 12, 2024

SolarWinds



 SolarWinds là một công ty công nghệ nổi tiếng chuyên cung cấp các giải pháp quản lý hạ tầng CNTT, giám sát mạng, máy chủ, ứng dụng và cơ sở dữ liệu. Các sản phẩm của SolarWinds giúp các tổ chức quản lý và tối ưu hóa hiệu năng của hệ thống CNTT một cách hiệu quả.


Các lĩnh vực chính mà SolarWinds phục vụ

  1. Quản lý mạng (Network Management)

    • Giám sát hiệu năng mạng, độ trễ, và băng thông.
    • Xử lý sự cố mạng với các công cụ trực quan và chi tiết.
  2. Quản lý hệ thống (Systems Management)

    • Theo dõi hiệu năng của máy chủ (Windows, Linux) và các ứng dụng.
    • Giám sát tài nguyên như CPU, RAM, dung lượng ổ cứng.
  3. Quản lý cơ sở dữ liệu (Database Management)

    • Tối ưu hóa hiệu năng cơ sở dữ liệu.
    • Cảnh báo khi xảy ra lỗi hoặc hiệu năng giảm sút.
  4. Giám sát bảo mật (Security Monitoring)

    • Phát hiện các mối đe dọa bảo mật và quản lý log.
    • Tích hợp công cụ SIEM (Security Information and Event Management).
  5. Quản lý dịch vụ CNTT (IT Service Management)

    • Hỗ trợ quản lý yêu cầu từ người dùng và tự động hóa quy trình hỗ trợ kỹ thuật.

Một số sản phẩm nổi bật của SolarWinds

  • Network Performance Monitor (NPM): Giám sát mạng toàn diện.
  • Server & Application Monitor (SAM): Theo dõi hiệu năng máy chủ và ứng dụng.
  • Database Performance Analyzer (DPA): Công cụ tối ưu cơ sở dữ liệu.
  • Security Event Manager (SEM): Hỗ trợ bảo mật hệ thống và quản lý log.

Ứng dụng của SolarWinds

SolarWinds thường được sử dụng trong các tổ chức như:

  • Doanh nghiệp lớn quản lý hạ tầng CNTT phức tạp.
  • Trung tâm dữ liệu hoặc nhà cung cấp dịch vụ Internet (ISP).
  • Các tổ chức tài chính, giáo dục, và y tế yêu cầu giám sát và bảo mật cao.

Nếu bạn cần thông tin cụ thể hơn về sản phẩm hoặc cách triển khai SolarWinds, mình có thể hỗ trợ thêm!

Thứ Tư, 4 tháng 12, 2024

Log Shipping - SQL Server

Đây là hình minh họa cho quy trình Log Shipping trong SQL Server, bao gồm các thành phần chính: Primary Server, Secondary Server, và Monitor Server, cùng với các bước Backup, Copy, và Restore. Hy vọng hình ảnh này hữu ích cho việc hiểu và trình bày khái niệm!


 Log Shipping trong SQL Server là một giải pháp dự phòng (Disaster Recovery) cho phép sao chép (replicate) và đồng bộ hóa cơ sở dữ liệu giữa hai hoặc nhiều máy chủ SQL Server. Đây là một phương pháp để đảm bảo dữ liệu được sao lưu và phục hồi nhanh chóng trong trường hợp xảy ra sự cố.


Các thành phần chính của Log Shipping

  1. Primary Server (Máy chủ chính):

    • Máy chủ chứa cơ sở dữ liệu gốc mà bạn muốn thực hiện log shipping.
    • Tạo bản sao lưu tệp Transaction Log định kỳ.
  2. Secondary Server(s) (Máy chủ phụ):

    • Máy chủ nhận các bản sao tệp Transaction Log từ máy chủ chính.
    • Khôi phục dữ liệu từ các tệp log này để duy trì cơ sở dữ liệu đồng bộ.
  3. Monitor Server (Máy chủ giám sát - tùy chọn):

    • Theo dõi trạng thái của Log Shipping, bao gồm việc sao lưu, sao chép, và khôi phục các tệp log.

Cách hoạt động của Log Shipping

  1. Sao lưu (Backup):

    • Máy chủ chính tạo các bản sao lưu Transaction Log theo lịch định sẵn.
  2. Sao chép (Copy):

    • Các tệp Transaction Log được sao chép từ máy chủ chính sang máy chủ phụ qua mạng.
  3. Khôi phục (Restore):

    • Máy chủ phụ áp dụng các tệp log đã sao chép để cập nhật cơ sở dữ liệu của mình.

Lợi ích của Log Shipping

  • Tăng khả năng dự phòng: Máy chủ phụ có thể được sử dụng làm máy chủ dự phòng nếu máy chủ chính gặp sự cố.
  • Khả năng mở rộng: Hỗ trợ nhiều máy chủ phụ.
  • Cấu hình đơn giản: Log Shipping không yêu cầu phần mềm bên ngoài, được tích hợp sẵn trong SQL Server.

Hạn chế của Log Shipping

  • Không tự động chuyển đổi (Failover): Log Shipping không cung cấp tự động chuyển đổi như các giải pháp Always On hoặc Mirroring.
  • Không cập nhật theo thời gian thực: Có độ trễ giữa thời gian sao lưu, sao chép và khôi phục tệp log.
  • Dữ liệu chỉ đọc: Cơ sở dữ liệu trên máy chủ phụ thường ở chế độ chỉ đọc.

Quy trình cấu hình Log Shipping

  1. Chuẩn bị cơ sở dữ liệu chính:

    • Bật chế độ Full Recovery Mode cho cơ sở dữ liệu chính.
    • Tạo một bản sao lưu đầy đủ và khôi phục nó trên máy chủ phụ.
  2. Cấu hình Log Shipping:

    • Truy cập SQL Server Management Studio (SSMS) trên máy chủ chính.
    • Chuột phải vào cơ sở dữ liệu chính -> Tasks -> Ship Transaction Logs.
    • Thiết lập lịch sao lưu tệp log trên máy chủ chính.
  3. Thêm máy chủ phụ:

    • Cung cấp thông tin máy chủ phụ, đường dẫn sao chép tệp log, và thiết lập lịch khôi phục.
  4. (Tùy chọn) Thêm máy chủ giám sát:

    • Chỉ định máy chủ giám sát để theo dõi trạng thái log shipping.
  5. Kiểm tra Log Shipping:

    • Kiểm tra xem tệp log có được sao lưu, sao chép, và khôi phục thành công không.

Các tình huống sử dụng Log Shipping

  • Dự phòng cho môi trường sản xuất: Bảo vệ dữ liệu trong trường hợp máy chủ chính bị lỗi.
  • Báo cáo trên máy chủ phụ: Tách biệt tải công việc bằng cách sử dụng máy chủ phụ để tạo báo cáo từ dữ liệu chỉ đọc.

Thứ Hai, 2 tháng 12, 2024

Nền tảng điện toán đám mây của Oracle


OCI là viết tắt của Oracle Cloud Infrastructure, một nền tảng điện toán đám mây do Oracle cung cấp. OCI được thiết kế để hỗ trợ các doanh nghiệp triển khai, vận hành và quản lý hạ tầng công nghệ thông tin (CNTT) của mình trên đám mây với hiệu suất cao, bảo mật mạnh mẽ và khả năng mở rộng linh hoạt.

Đặc điểm chính của OCI

  1. Cơ sở hạ tầng như một dịch vụ (IaaS):

    • OCI cung cấp các dịch vụ cơ bản như máy ảo (VM), lưu trữ, mạng, và dịch vụ cơ sở dữ liệu.
  2. Khả năng mở rộng cao:

    • OCI cho phép doanh nghiệp dễ dàng mở rộng quy mô tài nguyên dựa trên nhu cầu thực tế.
  3. Hiệu suất mạnh mẽ:

    • Được tối ưu hóa để xử lý các ứng dụng yêu cầu hiệu năng cao như AI, Machine Learning, và cơ sở dữ liệu Oracle.
  4. Bảo mật nâng cao:

    • Bao gồm nhiều lớp bảo mật như mã hóa dữ liệu, tường lửa ứng dụng web (WAF), và công cụ phát hiện mối đe dọa.
  5. Hỗ trợ đa đám mây (Multicloud):

    • OCI có thể tích hợp với các nền tảng đám mây khác như Microsoft Azure hoặc AWS.
  6. Dịch vụ chuyên sâu:

    • Ngoài hạ tầng cơ bản, OCI cung cấp các dịch vụ nâng cao như Oracle Autonomous Database, Big Data, Container Engine for Kubernetes (OKE), và các công cụ phát triển ứng dụng.

Lợi ích của OCI

  • Tối ưu hóa cho cơ sở dữ liệu Oracle: Đặc biệt phù hợp với các doanh nghiệp sử dụng các sản phẩm Oracle như cơ sở dữ liệu và ứng dụng ERP.
  • Chi phí hợp lý: Thường có mức giá cạnh tranh so với các nền tảng đám mây khác.
  • Hiệu năng cao: Cung cấp tốc độ xử lý và băng thông vượt trội.
  • Hỗ trợ doanh nghiệp: Tích hợp nhiều giải pháp quản lý doanh nghiệp và công cụ phân tích dữ liệu.

Ứng dụng của OCI

  • Chạy ứng dụng kinh doanh quan trọng: ERP, CRM, và các ứng dụng tài chính.
  • Phân tích dữ liệu lớn: Hỗ trợ xử lý dữ liệu lớn và các giải pháp AI/ML.
  • Lưu trữ dữ liệu và sao lưu: Dịch vụ lưu trữ đám mây an toàn và đáng tin cậy.
  • Triển khai container: Sử dụng Kubernetes và Docker để triển khai ứng dụng hiện đại.

Nếu doanh nghiệp của bạn cần một nền tảng đám mây mạnh mẽ, tích hợp tốt với hệ sinh thái Oracle, và có khả năng mở rộng linh hoạt, thì OCI là một lựa chọn đáng cân nhắc.

SonicDB

 


SonicDB là một cơ sở dữ liệu tìm kiếm (search database) được thiết kế đặc biệt để xử lý các truy vấn tìm kiếm theo thời gian thực với tốc độ cực nhanh và hiệu quả. Nó thường được sử dụng để tích hợp khả năng tìm kiếm vào các ứng dụng hoặc hệ thống, chẳng hạn như tìm kiếm toàn văn (full-text search), tìm kiếm từ khóa, hoặc các truy vấn liên quan đến dữ liệu phi cấu trúc.

Đặc điểm chính của SonicDB

  1. Tốc độ cao:

    • SonicDB tối ưu hóa hiệu suất để xử lý các truy vấn với độ trễ thấp, nhờ sử dụng bộ nhớ và chỉ số tối ưu.
  2. Nhẹ và hiệu quả:

    • Không như các hệ thống tìm kiếm lớn như Elasticsearch, SonicDB rất nhẹ, dễ triển khai, và không đòi hỏi nhiều tài nguyên hệ thống.
  3. Hỗ trợ tìm kiếm toàn văn:

    • SonicDB có thể xử lý tìm kiếm toàn văn (full-text search) trên các văn bản dài hoặc dữ liệu không cấu trúc.
  4. API dễ sử dụng:

    • Sonic cung cấp giao diện RESTful API hoặc giao thức gRPC, giúp dễ dàng tích hợp vào các ứng dụng.
  5. Khả năng mở rộng:

    • Mặc dù nhẹ, SonicDB vẫn hỗ trợ khả năng mở rộng, phù hợp cho cả dự án nhỏ và lớn.
  6. Tập trung vào trải nghiệm tìm kiếm:

    • SonicDB chỉ tập trung vào chức năng tìm kiếm, không thay thế các cơ sở dữ liệu truyền thống như MySQL hay MongoDB.

SonicDB phù hợp cho các trường hợp nào?

  • Ứng dụng web và di động:
    • Tìm kiếm nhanh trên các nội dung như bài viết, sản phẩm, hoặc tài liệu.
  • Quản lý dữ liệu phi cấu trúc:
    • Hỗ trợ tìm kiếm trong các tập tin văn bản, email, hoặc các tài liệu lớn.
  • Thay thế các hệ thống tìm kiếm cồng kềnh:
    • Với thiết kế nhẹ, SonicDB có thể là một lựa chọn thay thế cho Elasticsearch khi yêu cầu không quá phức tạp.

Ưu điểm

  • Hiệu suất cao với yêu cầu tài nguyên thấp.
  • Dễ sử dụng và triển khai.
  • Tích hợp tốt với các hệ thống hiện có.

Nhược điểm

  • Không mạnh mẽ như Elasticsearch hoặc Solr cho các trường hợp phức tạp.
  • Tập trung vào tìm kiếm, không hỗ trợ lưu trữ dữ liệu đa chiều như các cơ sở dữ liệu NoSQL khác.

Nếu bạn đang xây dựng một ứng dụng yêu cầu chức năng tìm kiếm tốc độ cao mà không muốn triển khai các giải pháp phức tạp, SonicDB có thể là một lựa chọn lý tưởng.

Chủ Nhật, 17 tháng 11, 2024

Flutter kẻ đánh bại React Native?

 

Flutter

Flutter là một framework phát triển giao diện người dùng mã nguồn mở do Google tạo ra. Nó cho phép các nhà phát triển xây dựng ứng dụng di động, web và desktop từ một cơ sở mã duy nhất. Flutter được công bố lần đầu vào năm 2017 và nhanh chóng trở thành một trong những công cụ phát triển ứng dụng phổ biến nhất nhờ vào khả năng phát triển nhanh, giao diện đẹp mắt và khả năng đa nền tảng.

Đặc điểm nổi bật của Flutter:

  1. Một cơ sở mã cho nhiều nền tảng: Bạn chỉ cần viết mã một lần và có thể chạy ứng dụng trên Android, iOS, web, và cả desktop (Windows, macOS, Linux).
  2. Hiệu suất cao: Flutter sử dụng ngôn ngữ Dart (cũng do Google phát triển) và biên dịch thành mã máy (machine code). Điều này giúp ứng dụng Flutter có tốc độ và hiệu suất gần như ứng dụng viết bằng mã gốc (native code).
  3. Giao diện người dùng đẹp mắt: Flutter có một hệ thống widget phong phú, cung cấp các công cụ xây dựng giao diện hiện đại, tương tác cao, tùy biến dễ dàng. Bạn có thể tạo ra giao diện người dùng giống với các ứng dụng gốc hoặc tạo giao diện độc đáo cho riêng mình.
  4. Hot Reload (Tải lại nhanh): Tính năng này giúp nhà phát triển có thể xem ngay lập tức các thay đổi trong mã nguồn mà không cần phải biên dịch lại toàn bộ ứng dụng. Điều này giúp tăng tốc quá trình thử nghiệm và phát triển.
  5. Hỗ trợ bởi cộng đồng mạnh mẽ và Google: Flutter có một cộng đồng nhà phát triển rất lớn và nhận được sự hỗ trợ mạnh mẽ từ Google. Nhiều plugin và gói mở rộng có sẵn để giúp bạn xây dựng ứng dụng nhanh hơn.

Cấu trúc cơ bản của Flutter:

  • Widget: Mọi thứ trong Flutter đều là widget, từ các nút bấm, hộp văn bản đến bố cục. Widgets có thể được lồng ghép vào nhau để tạo nên giao diện phức tạp.
  • Ngôn ngữ lập trình Dart: Flutter sử dụng Dart, một ngôn ngữ lập trình hướng đối tượng và được thiết kế để dễ đọc, dễ học, đặc biệt khi làm việc với Flutter.

Các ứng dụng phổ biến dùng Flutter:

Nhiều ứng dụng nổi tiếng trên thế giới đã sử dụng Flutter để phát triển như Google Ads, Alibaba, Reflectly, BMW, và eBay Motors.

Ví dụ mã Flutter đơn giản:

import 'package:flutter/material.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar(title: Text('Hello Flutter')), body: Center(child: Text('Welcome to Flutter!')), ), ); } }

Trong ví dụ trên, ứng dụng Flutter tạo ra một giao diện đơn giản với một tiêu đề và văn bản "Welcome to Flutter!" được hiển thị ở giữa màn hình.

Lua là gì?



    Lua là một ngôn ngữ lập trình nhẹ, linh hoạt và dễ nhúng, thường được sử dụng để thêm khả năng tùy chỉnh cho các ứng dụng hoặc trò chơi lớn. Lua có nguồn gốc từ Brazil vào đầu những năm 1990 và được thiết kế với các mục tiêu chính là tính đơn giản, hiệu quả và khả năng dễ dàng tích hợp với các ứng dụng khác.

Đặc điểm của Lua:

  1. Dễ học và dễ sử dụng: Lua có cú pháp đơn giản, rõ ràng, dễ đọc, phù hợp với cả người mới bắt đầu và lập trình viên dày dạn.
  2. Nhẹ và nhanh: Lua được tối ưu hóa để hoạt động nhanh và chiếm ít tài nguyên hệ thống. Đây là một ngôn ngữ lý tưởng để nhúng vào các ứng dụng yêu cầu hiệu suất cao.
  3. Linh hoạt: Lua hỗ trợ lập trình chức năng, lập trình hướng đối tượng, và có thể tích hợp dễ dàng với C/C++. Điều này làm cho Lua trở thành lựa chọn tốt cho các ứng dụng cần tùy biến mạnh mẽ.

Ứng dụng phổ biến của Lua:

  • Trò chơi điện tử: Lua thường được dùng làm ngôn ngữ kịch bản (scripting) trong các công cụ phát triển game như Unity, Corona SDK, và Roblox. Nó giúp tạo logic cho nhân vật, sự kiện trong trò chơi hoặc thiết kế bản đồ.
  • Ứng dụng phần mềm nhúng: Lua được sử dụng trong các thiết bị IoT (Internet of Things) và các phần mềm nhúng nhờ vào sự gọn nhẹ và tốc độ xử lý.
  • Web server và frameworks: Lua được sử dụng trong các máy chủ web như nginx (với module ngx_lua) hoặc các framework nhẹ như Lapis.

Ví dụ về mã Lua cơ bản:

print("Hello, Lua!") -- Ví dụ hàm tính tổng
function add(a, b)
return a + b
end print(add(3, 5)) -- Kết quả: 8

 

Lua sử dụng cú pháp rất gọn gàng và trực quan, giúp cho việc phát triển các module nhúng nhanh chóng, trong khi vẫn duy trì tính mạnh mẽ và khả năng mở rộng. Lua cũng được biết đến nhờ cộng đồng mạnh mẽ và có nhiều thư viện hỗ trợ.

CORS là gì?

 

CORS (Cross-Origin Resource Sharing) là một cơ chế bảo mật trên web cho phép một trang web tại một nguồn (domain) yêu cầu tài nguyên từ một nguồn khác. Đây là cách trình duyệt kiểm soát các yêu cầu HTTP từ một nguồn khác với nguồn gốc của trang được tải.

Tại sao cần CORS?

Trình duyệt web giới hạn các yêu cầu HTTP giữa các nguồn gốc khác nhau để ngăn chặn các cuộc tấn công bảo mật, chẳng hạn như CSRF (Cross-Site Request Forgery). Tuy nhiên, nhiều ứng dụng web cần truy cập tài nguyên từ các nguồn khác nhau, như lấy dữ liệu từ một API bên ngoài, và do đó cơ chế CORS được đưa vào để cho phép điều này một cách an toàn và có kiểm soát.

Cách hoạt động của CORS

  1. Khi một yêu cầu từ một nguồn khác được thực hiện (cross-origin), trình duyệt sẽ thêm các tiêu đề HTTP đặc biệt để xác định nguồn gốc của yêu cầu.
  2. Máy chủ phản hồi sẽ kiểm tra các tiêu đề này và quyết định xem có cho phép yêu cầu từ nguồn gốc này hay không, bằng cách thêm các tiêu đề CORS (ví dụ: Access-Control-Allow-Origin).
  3. Nếu máy chủ cho phép, trình duyệt sẽ cho phép yêu cầu hoàn tất và trả về dữ liệu cho trang web.

Ví dụ về tiêu đề CORS:

  • Access-Control-Allow-Origin: Xác định các nguồn được phép truy cập. Ví dụ:
    • Access-Control-Allow-Origin: * cho phép mọi nguồn gốc.
    • Access-Control-Allow-Origin: https://example.com chỉ cho phép từ https://example.com.

Các khái niệm liên quan:

  • Simple Requests (Yêu cầu đơn giản): Được cho phép mà không cần thêm kiểm tra trước.
  • Preflight Requests (Yêu cầu thăm dò trước): Trình duyệt gửi một yêu cầu OPTIONS trước để xác minh rằng máy chủ cho phép loại yêu cầu này, áp dụng cho các yêu cầu không đơn giản (như với các phương thức khác GET, POST hoặc có các tiêu đề tùy chỉnh).

Ví dụ thực tế:

Giả sử bạn có một ứng dụng web trên http://example1.com cần gửi yêu cầu tới API trên http://api.example2.com. Nếu api.example2.com không bật CORS và cho phép http://example1.com, trình duyệt sẽ chặn yêu cầu này để đảm bảo bảo mật.

Tóm lại, CORS là cách trình duyệt cho phép hoặc ngăn chặn các yêu cầu giữa các nguồn để bảo vệ tài nguyên web, đồng thời cho phép truy cập có kiểm soát khi cần.

Thứ Năm, 9 tháng 6, 2022

Cocos Creator - Lựa chọn cho ngành công nghiệp phát triển trò chơi

 


Cocos là gì?

    Cocos Creator là một công cụ phát triển trò chơi tập trung vào việc tạo nội dung, theo kịch bản, dựa trên thành phần và theo hướng dữ liệu. Nó có quy trình sản xuất nội dung dễ sử dụng và bộ công cụ dành cho nhà phát triển mạnh mẽ để triển khai logic trò chơi và các hiệu ứng trò chơi hiệu suất cao.

Workflow

    Trong quá trình phát triển, Cocos Creator đã có thể mang lại hiệu quả và sự sáng tạo tuyệt vời cho người dùng, tuy nhiên quy trình làm việc mà chúng tôi đưa ra còn vượt xa sự phát triển. Đối với một trò chơi thành công, toàn bộ quy trình phát triển và gỡ lỗi, tích hợp SDK thương mại, phát hành, thử nghiệm và khởi chạy đa nền tảng không chỉ là điều không thể thiếu mà còn phải lặp lại qua nhiều lần.



    Cocos Creator tích hợp toàn bộ giải pháp trò chơi trên trình duyệt dành cho thiết bị di động vào công cụ, loại bỏ sự cần thiết phải di chuyển giữa nhiều ứng dụng phần mềm. Khi mở trình tự động bằng một cú nhấp chuột sẽ tốn ít thời gian và công sức nhất để giải quyết các vấn đề. Các nhà phát triển có thể tập trung vào giai đoạn phát triển và tăng khả năng cạnh tranh và sáng tạo của sản phẩm.

Tạo hoặc thêm tài nguyên

    Bạn có thể thêm tài nguyên bằng cách kéo thả ảnh, âm thanh... vào trình quản lý nội dung. Ngoài ra bạn có thể tạo cảnh, bản dựng, hoạt ảnh, tập lệnh, phần tử và các tài nguyên khác trực tiếp trong trình chỉnh sửa.

Tạo bối cảnh

    Sau khi có một số tài nguyên trong project, chúng ta có thể bắt đầu cài đặt bối cảnh. Bối cảnh thì là một phần cơ bản nhất của nội dung trò chơi, và nó cũng là hình thức cơ bản để hiện thị trò chơi cho người chơi.

Tính năng

    Các tính năng nổi bật của Cocos Creator:
    • Các thuộc tính dữ liệu có thể được điều chỉnh bất kỳ lúc nào trong trình chỉnh sửa và có thể dễ dàng khai báo các tập lệnh, điều chỉnh các thông số mà không cần can thiệp vào mã.
    • Phù hợp với các kích thước màn hình khác nhau.
    • Hỗ trợ hệ thống animation, preview
    • Hỗ trợ ngôn ngữ động, có thể sử dụng JavaScript để phát triển trò chơi, xem trước và gỡ lỗi nhanh chóng trên máy và thiết bị vật lý.
    • Phát triển tiếp dựa trên Cocos2d-x duy trì được hiệu suất và phát triển thêm các tính năng mới
Kiến trúc Framework
    
    Cocos Creator bao gồm đầy đủ các tính năng bắt buộc cho việc phát triển game như là game engine, quản lý tài nguyên, chỉnh sửa cảnh, game preview, publish game, và tích hợp tất cả chức năng vào một ứng dụng duy nhất.

    Trong khi cung cấp một chuỗi công cụ mạnh mẽ, cung cấp một kiến trúc plug-in mở cho phép các nhà phát triển tích hợp thêm vào và có thể tùy trỉnh để cá nhân hóa quy trình bằng cách sử dụng các công nghệ chung front-end như HTML + JavaScript

    Dưới đây là sơ đồ kiến trúc kỹ thuật của Cocos Creator



Link nguồn: Link










Liên kết


noun

khoen, người nối tiếp, vật để nối tiếp, liên kết, vòng sắt, lổ đan, lổ lưới


verb

nối, nối liền, nối tiếp

Thứ Ba, 7 tháng 6, 2022

DB:Transaction là gì và cách sử dụng trong Laravel



Bài viết này sẽ nói về mục đích của DB:Transaction và tại sao chúng ta lại sử dụng cuối cùng là lợi ích khi sử dụng chúng.

Database Transaction là gì?

Database Transaction cung cấp một Facade DB để chạy một tập hợp hoạt động trong một câu lệnh query, xử lý có tuần tự các thao tác trên cơ sở dữ liệu. 

Nó cung cấp cho chúng ta khả năng mạnh mẽ để đảm bảo an toàn khi chạy các tập lệnh SQL, sửa đổi dữ liệu như chèn, cập nhật, xóa. Nó an toàn vì có thể khôi phục tất cả các câu truy vấn được thực hiện trước đó trong một tập các câu lệnh SQL.

Tại sao sử dụng Database Transaction

Cùng kiểm tra chúng ta có ứng dụng màn quản trị viên có thể xem tất cả các bài đăng và người dùng đó, được liên kết với nhau. Khi quản trị viên xóa bài Post của user, và nếu bất kỳ hoạt động nào fail chúng ta cần khôi phục lại hoạt động trước đó để ngăn chặn sự cố gây ra lỗi và gửi lại thông báo lỗi cho quản trị viên.

Chủ Nhật, 5 tháng 6, 2022

JWT là gì? | Khái niệm của Json Web Token | Phần 2

 


Putting all together

Đầu ra là 3 chuỗi Base64-URL được phân tách bằng dấu chấm có thể dễ dàng chuyển trong môi trường HTML và HTTP, đồng thời nhỏ gọn hơn khi so sánh với các tiêu chuẩn dự trên XML như SAML

Dưới đây là một JWT có header và payload đã được mã hóa, và nó đã được ký với một mật mã.



Nếu bạn muốn khám phá JWT và sử dụng thử, bạn có thể sử dụng jwt.io.

JSON Web Tokens hoạt động ra sao?

Trong xác thực khi người dùng đăng nhập thành công bằng thông tin của họ, một JWT sẽ được trả về. Phải hết sức cẩn thận để ngăn chặn các vấn đề bảo mật. Lưu ý bạn không nên giữ các token sống lâu hơn yêu cầu. Bạn cũng không nên lưu trữ dữ liệu nhạy cảm trong phiên làm việc của trình duyệt do thiếu bảo mật.

 Bất kỳ khi nào bạn muốn truy cập vào một route hoặc tài nguyên cần xác thực thì bạn bắt buộc phải gửi JWT kèm theo thường là trong tiêu đề bằng cách sử dụng Bearer.

Ví dụ: Authorization: Bearer <token>

Lưu ý rằng nếu bạn gửi mã thông báo JWT thông qua header HTTP, bạn nên cố gắng ngăn chúng quá lớn. Một số máy chủ không chấp nhận tiêu đề nhiều hơn 8KB. Nếu bạn đang cố gắng nhúng quá nhiều thông tin vào mã thông báo JWT, bạn cần có một giải pháp thay thế chẳng hạn như Auth0 Fine-Grained Authorization.

Nếu token được gửi trong Header, Cross-origin không phải là vấn đề vì nó không sử dụng cookie.

Sơ đồ sau thể hiện chó cách JWT được lấy và sử dụng để truy cập các API hoặc tài nguyên:


Xin lưu ý rằng với token đã ký, tất cả thông tin có trong token sẽ được hiển thị cho người dùng hoặc các bên khác, mặc dù họ không thể thay đổi nó. Diều này có nghĩa là bạn không nên đặt thông tin bí mật trong token.

Tại sao chúng ta nên sử dụng JWT?

Hãy để tôi nói cho bạn về lợi ích của JWT khi so sánh giữa SWT và SAML (Security Assertion Markup Language Tokens)

Vì JSON ít dài dòng hơn XML nên khi được mã hóa, kích thước của nó cũng nhỏ  hơn, làm cho JWT nhỏ gọn hơn SAML. 

Về mặt bảo mật, JWT chỉ có thể được ký đối xứng bằng một mật mã được chia sẻ bằng cách sử dụng thuật toán HMAC. Tuy nhiên, token JWT và SAML có thể sử dụng cặp khóa công khai hoặc riêng tu dưới dạng chứng chỉ X.509 để ký. Việc ký XML với chữ ký số XML mà không có các lỗ hổng bảo mật khó hiểu là rất khó khi so sánh với sự đơn giản của việc ký JSON.

Thứ Bảy, 4 tháng 6, 2022

JWT là gì? | Khái niệm của Json Web Token | Phần 1



JSON Web Token là một phương pháp RFC 7519 tiêu chuẩn mở để trình bày các xác nhận quyền sở hữu một cách an toàn giữa hai bên một cách nhỏ gọn và khép kín. Thông tin này có thể được xác minh và đáng tin cậy vì nó được ký điện tử. JWT có thể được ký bằng cách sử dụng một mã ( với thuật toán HMAC ) hoặc một cặp khóa công khai/riêng tư bằng RSA hoặc ECDSA.


Một ví dụ về JWT Token:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjEzODY4OTkxMzEsImlzcyI6ImppcmE6MTU0ODk1OTUiLCJxc2giOiI4MDYzZmY0Y2ExZTQxZGY3YmM5MGM4YWI2ZDBmNjIwN2Q0OTFjZjZkYWQ3YzY2ZWE3OTdiNDYxNGI3MTkyMmU5IiwiaWF0IjoxMzg2ODk4OTUxfQ.uKqU9dTB6gKwG6jQCuXYAiMNdfNRw98Hw_IWuA5MaMo

 Vậy thì khi nào chúng ta sử dụng JSON Web Tokens

  • Authorization: Đây là tình huống phổ biến nhất sử dụng JWT. Mỗi requets tiếp theo sẽ bao gồm JWT, cho phép người dùng truy cập các routes, services, và dịch vụ tài nguyên được phép với mã thông báo đó. SSO là một tính năng sử dụng rộng rãi JWT ngày nay, vì chi phí nhỏ và khả năng dễ dàng sử dụng trên các miền khác nhau
  • Trao đổi thông tin: Mã thông báo web JSON là một cách tốt để truyền thông tin giữa các bên một cách an toàn. Bởi vì JWT có thể được ký — ví dụ: sử dụng cặp khóa công khai / riêng tư — bạn có thể chắc chắn rằng người gửi là những người họ nói. Ngoài ra, vì chữ ký được tính bằng cách sử dụng tiêu đề và trọng tải, bạn cũng có thể xác minh rằng nội dung không bị giả mạo.
Cấu trúc mã thông báo web JSON là gì


Ở dạng nhỏ gọn, JWT bao gồm ba phần được phân tách bằng dấu chấm (.), Đó là:

    • Header
    • Payload
    • Signature

Do đó, một JWT thường trông giống như sau. xxxxx.yyyyyy.zzzzzz


  1. Header
    Header bao gồm 2 phần: loại của token và thuật toán đang được sử dụng
    Ví dụ: 
    {
       "alg": "HS256",
       "type": "JWT"
    }

    Sau đó JSON này sẽ được mã hóa thành Base64Url để tạo thành phần đầu tiên của JWT

  2. Payload
    Thành phần thứ 2 của token là payload. Xác nhận quyền sở hữu tuyên bố về một thực thể (typically, the user) và dữ liệu bổ sung. Có 3 loại xcas nhận quyền sở hữu: registered, public, và private.
    • Registered claims: Đây là một tập hợp các xác nhận quyền sở hữu được xác định trước, không bắt buộc nhưng được khuyến nghị, để cung cấp một tập hợp các xác nhận quyền sở hữu. Một trong số đó là: iss(nhà phát hành), exp(thời gian hết hạn), sub(chủ đề), aud(khán giả) và những thứ khác.
    • Public claims: Những người sử dụng JWT có thể xcas định những điều này theo ý muốn. Nhưng để tránh xung đột, chúng ta nên được xác định trong IANA JSON Web hoặc được định nghĩa là một URI có chứa namespace chống xung đột.
    • Private claims: Đây là những tuyên bố tùy chỉnh được tạo ra để chia sẻ thông tin giữa các bên đồng ý sử dụng chúng và không phải là tuyên bố đã đăng ký hoặc công khai.

      Ví dụ:
      {
          "sub": "1234567890",
          "name": "John Doe",
          "admin": true
      }
  3. Signature
    Để tạo phần chữ ký bạn phải lấy tiêu đề được mã hóa, mã hóa payload, một mật mã, thuật toán được chỉ định trong header, và ký tên đó.
    Ví dụ: nếu bạn muốn sử dụng thuật toán HMAC SHA256, chữ ký sẽ được tạo theo cách sau:
    HMACSHA256(
      base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

    Do bản thân Signature đã bao gồm cả header và payload nên Signature có thể dùng để kiểm tra tính toàn vẹn của dữ liệu khi truyền tải.

Chữ ký


noun

chữ ký, dấu ở đầu bản nhạc, tên ký

Thứ Sáu, 3 tháng 6, 2022

Percona TokuDB là gì?


 Percona TokuDB là công cụ lưu trữ mã nguồn mở, hiệu suất cao dành cho máy của Percona cho Mysql giúp cải thiện khả năng mở rộng và hiệu quả hoạt động. Nó đạt được điều này bằng cách sử dụng chỉ số cây Fractal. Nó có thể mở rộng, tuân thủ ACID và MVCC, cung cấp các cải tiến truy vấn dựa trên lập chỉ mục, cung cấp các sửa đổi lược đồ trực tuyến và giảm độ trẽ sao chép cho cả ổ đĩa cứng và bộ nhớ flash.

Được thiết kế cho các yêu cầu khắt khe của các ứng dụng dữ liệu lớn và bộ dữ liệu lớn. Percona TokuDB giảm chi phí triển khai liên quan đến các nỗ lực mở rộng và tối ưu hóa.

Percona Server for MySQL tập trung vào việc tăng hiệu suất cho MySQL, và đặc biệt tối ưu cấu trúc lưu trữ InnoDB - với tên gọi XtraDB. Percona bám sát sự phát triển của các phiên bản MySQL, so với MariaDB thì Percona chỉ tối ưu hóa MySQL chứ không phát triển thêm các chức năng.

Một số tính năng chính:

  • Nhanh và có thể mở rộng
  • Hiệu suất tốt nhanh hơn tới 20 lần so với InnoDB
  • ROI mạnh hơn giảm chi phí vận hành và cơ sở hạ tầng, đồng thời tăng khả năng mở rộng và tính linh hoạt.
  • Tính khả dụng cao, ít thời gian chết cho các ứng dụng đòi hỏi trong môi trường cloud

Thứ Ba, 8 tháng 2, 2022

Tạo Project Angular

 Bắt đầu tạo một dự án bằng cách sử dụng Angular CLI. Trong hướng dẫn này, bạn sẽ bắt đầu mở một ứng dụng với tên Tour of Heroes.

Trong bài hướng dẫn này gồm có:

  • Cài đặt môi trường
  • Tạo một không gian làm việc và dự án đầu tiên
  • Serve của ứng dụng
  • Thay đổi trong ứng dụng
Cài đặt môi trường:

Bạn cần cài đặt môi trường phát triển, theo hướng dẫn link

Tạo một không gian làm việc và dự án đầu tiên

Bạn phát triển ứng dụng trong một không gian của Angular. Một không gian làm việc có thể chứa một hoặc nhiều dự án. Một dự án là một tập hợp các tệp bao gồm ứng dụng haowjc một thư viện. Đối với hướng dẫn này, bạn sẽ tạo một không gian làm việc.

Để tạo một không gian làm việc và dự án đầu tiên:

1. Đảm bảo rằng bạn ở trong thư mục không gian làm việc Angular. Ví dụ nếu trước đó bạn đã tạo không gian làm việc, thì hãy thay đổi thành thành vần cha của nó.

2. Chạy CLI ng new và tên dự án angular-tour-of-heroes

3. ng new 

Thứ Ba, 16 tháng 6, 2020

Socket.io Tạo một ứng dụng chat đơn giản

Socket.io

Trong bài hướng dẫn này, chúng tôi sẽ tạo một ứng dụng trò chuyện cơ bản. Nó không yêu cầu kiến thức cơ bản của Node,JS hoặc Socket.IO, vì vậy nó rất lý tưởng cho người dung ở mọi cấp độ kiến thức.

Giới thiệu

Viết một ứng dụng trò chuyện với ứng dụng Web phổ biến như LAMP (PHP) thường dẫn khó. Nó liên quan đến việc bỏ phiếu cho máy chủ để thay đổi, theo dõi dấu thời gian, và nó chậm hơn rất nhiều.

Sockets theo thông thường là giải pháp xung quanh mà hầu hết các hệ thống trò chuyện thời gian thực được cấu trúc, cung cấp một giao tiếp hai chiều giữa máy khách và máy chủ.

Điều này có nghĩa là máy chủ có thể đẩy tin nhắn đến máy khách. Bất cứ khi nào bạn viết một tin nhắn trò chuyện, ý tưởng là máy chủ sẽ lấy nó và đẩy nó tới tất cả các máy khách được kết nối.

Web framework

Đầu tiên mục tiêu cài đặt một trang HTML cơ bản phục vụ một máy chủ và danh sách các tin nhắn. Chúng tôi sẽ sử dụng framework Node.js. Hãy chắc chắn rằng bạn đã cài Node.js.

Trước tiên hãy tạo một file package.json để kê khai mô tả dự án. Tôi khuyến khích bạn đặt nó trong một thư mục trống ( Tôi gọi nó là chat-example ).

{
  "name":
"socket-chat-example",
  "version":
"0.0.1",
  "description":
"my first socket.io app",
  "dependencies": {}
}

Bây giờ, cài đặt các dependencies cần thiết chúng tôi sẽ sử dụng npm install:

npm install express@4.15.2

Sau khi cài đặt, chúng ta có thể tạo tệp index.js để thiết lập ứng dụng của mình.

var app = require('express')();
var http = require('http').createServer(app);

app.get(
'/', (req, res) => {
  res.send(
'<h1>Hello world</h1>');
});

http.listen(
3000, () => {
 
console.log('listening on *:3000');
});

Nó có nghĩa là:

-          Express khoiwr tạo ứng dụng để trở thành một trình xử lý chức năng mà bạn có thể cung cấp cho máy chủ HTTP

-          Chúng ta xác định một trình xử lý tuyến đường/được gọi khi chúng ta truy cập trang web.

-          Chúng ta làm ccho máy chủ HTTP lắng nghe trên cổng 3000.

Nếu bạn chạy node index.js bạn sẽ thấy như sau

Và nếu bạn truy cập trên trình duyệt: http://localhost:3000

HTML

Trong file index.js chúng ta gọi res.send và truyền thành một chuỗi của HTML. Mã của chúng tôi sẽ trông rất khó hiểu nếu chúng ta đặt toàn bộ ứng dụng trong HTML, vì thế thay thế chúng ta tạo file index.html.

Thay vào đó, hãy cấu trúc lại bộ xử lý của chúng ta sử dụng sendFile.

app.get('/', (req, res) => {
  res.sendFile(__dirname +
'/index.html');
});


 

Đặt nó như sau trong file index.html của bạn:

<!doctype html>
<html>
 
<head>
   
<title>Socket.IO chat</title>
    
<style>
      * { margin: 0; padding: 0; box-sizing: border-box; }
      body { font: 13px Helvetica, Arial; }
      form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
      form input { border: 0; padding: 10px; width: 90%; margin-right: 0.5%; }
      form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
      #messages { list-style-type: none; margin: 0; padding: 0; }
      #messages li { padding: 5px 10px; }
      #messages li:nth-child(odd) { background: #eee; }
   
</style>
 
</head>
 
<body>
   
<ul id="messages"></ul>
   
<form action="">
     
<input id="m" autocomplete="off" /><button>Send</button>
   
</form>
 
</body>
</html>


 

Nếu bạn restart tiến trình ( bằng cách Control+C và chạy node index.js ) và refresh lại page sẽ như sau:

Tích hợp Socket.IO

Socket.IO bao gồm 2 phần:

-          Một máy chủ tích hợp với (hoặc gắn kết trên) Node.js HTTP Server socket.io

-          Một thư viện máy khách tải về phí trình duyệt socket.io-client

Trong suôt quá trình phát triển, socket.io phục vụ khách hang tự động cho chúng tôi, vì vậy chúng ta chỉ phải cài đặt một module:

npm install socket.io

Nó sẽ cài đặt module và them các dependency vào package.json


 

Bây giờ sửa file index.js them no:

var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io')(http);

app.get(
'/', (req, res) => {
  res.sendFile(__dirname +
'/index.html');
});

io.on(
'connection', (socket) => {
 
console.log('a user connected');
});

http.listen(
3000, () => {
 
console.log('listening on *:3000');
});

Lưu ý rằng tôi khởi tạo một phiên bản mới của socket.io bằng cách chuyển đối tượng http(máy chủ HTTP). Sau đó tôi lắng nghe sự kiện kết nối cho các socket và đăng nhập vào màn điều khiển.

Bây giờ trong file index.html thêm đoạn trích trước thẻ </body>

<script src="/socket.io/socket.io.js"></script>
<script>
 
var socket = io();
</script>

Đó là tất cả nhứng gì nó cần để tải socket.io-client

Nếu bạn muốn sử dụng phiên bản nội bộ của client-side js, bạn có thể tìm nó tại node_modules/socket.io-client/dist/socket.io.js.

Để ý tôi không chỉ định bất kỳ URL khi tôi gọi io(), vì nó mặc định cố gắng kết nối với máy chủ phục vụ trang.

Nếu ngay bây giờ bạn restart tiến trình và refresh trang web bạn có thể thấy màn hình hiển thị “a user connected”.

Cố gắng mở một vài tab và bạn sẽ thấy một số tin nhắn.

Mỗi socket cũng kích hoạt một sự kiện ngắt kết nối:

io.on('connection', (socket) => {
 
console.log('a user connected');
  socket.on(
'disconnect', () => {
   
console.log('user disconnected');
  });
});


 

Sau đó nếu bạn refresh một tab nhiều lần, bạn có thể thấy nó hoạt động:

Phát ra sự kiện

Ý tưởng chính phía sau socket.io là bạn có thể gửi và nhận được bất kỳ sự kiện bạn muốn, cùng với bất kỳ dữ liệu bạn muốn. Bất kỳ đối tượng nào có thể được mã hóa dưới dạng JSON sẽ làm, và dữ liệu nhị phân cũng được hỗ trợ.

Hãy tạo ra nó để khi người dung gõ một tin nhắn, máy chủ lấy nó dưới dạng tin nhắn trò chuyện. Phần section trong index.html bây giờ sẽ giống như:

<script src="/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script>
  $(
function () {
   
var socket = io();
    $(
'form').submit(function(e) {
      e.preventDefault();
// prevents page reloading
      socket.emit(
'chat message', $('#m').val());
      $(
'#m').val('');
     
return false;
    });
  });
</script>


 

Và trong index.js chúng ta in ra sự kiện tin nhắn trò chuyện:

io.on('connection', (socket) => {
  socket.on(
'chat message', (msg) => {
   
console.log('message: ' + msg);
  });
});

 

Broadcasting

Mục tiêu tiếp theo là để chúng ta phát ra sự kiện từ máy chủ đến những người dung còn lại.

Để gửi một sự kiện tới mọi người, socket.io cung cấp cho chúng ta phương thức io.emit().

io.emit('some event', { someProperty: 'some value', otherProperty: 'other value' }); // This will emit the event to all connected sockets

Nếu bạn muốn gửi một tin nhắn tới tất cả ngoại từ một socket, chúng ta có cờ để broadcast ra từ socket:

io.on('connection', (socket) => {
  socket.broadcast.emit(
'hi');
});

Trong trường hợp, vì mục đích đơn giản, chúng tôi sẽ gửi tin nhắn cho mọi người, kết cả người gửi.

io.on('connection', (socket) => {
  socket.on(
'chat message', (msg) => {
    io.emit(
'chat message', msg);
  });
});


 

Và trên phía khách hang khi chúng tôi ghi lại một sự kiện tin nhắn trò chuyện, chúng tôi sẽ đưa nó vào trang. Tổng mã JavaScript phía máy khách như sau:

<script>
  $(
function () {
   
var socket = io();
    $(
'form').submit(function(e){
      e.preventDefault();
// prevents page reloading
      socket.emit(
'chat message Socket.io

Trong bài hướng dẫn này, chúng tôi sẽ tạo một ứng dụng trò chuyện cơ bản. Nó không yêu cầu kiến thức cơ bản của Node,JS hoặc Socket.IO, vì vậy nó rất lý tưởng cho người dung ở mọi cấp độ kiến thức.

Giới thiệu

Viết một ứng dụng trò chuyện với ứng dụng Web phổ biến như LAMP (PHP) thường dẫn khó. Nó liên quan đến việc bỏ phiếu cho máy chủ để thay đổi, theo dõi dấu thời gian, và nó chậm hơn rất nhiều.

Sockets theo thông thường là giải pháp xung quanh mà hầu hết các hệ thống trò chuyện thời gian thực được cấu trúc, cung cấp một giao tiếp hai chiều giữa máy khách và máy chủ.

Điều này có nghĩa là máy chủ có thể đẩy tin nhắn đến máy khách. Bất cứ khi nào bạn viết một tin nhắn trò chuyện, ý tưởng là máy chủ sẽ lấy nó và đẩy nó tới tất cả các máy khách được kết nối.

Web framework

Đầu tiên mục tiêu cài đặt một trang HTML cơ bản phục vụ một máy chủ và danh sách các tin nhắn. Chúng tôi sẽ sử dụng framework Node.js. Hãy chắc chắn rằng bạn đã cài Node.js.

Trước tiên hãy tạo một file package.json để kê khai mô tả dự án. Tôi khuyến khích bạn đặt nó trong một thư mục trống ( Tôi gọi nó là chat-example ).

{
  "name":
"socket-chat-example",
  "version":
"0.0.1",
  "description":
"my first socket.io app",
  "dependencies": {}
}

Bây giờ, cài đặt các dependencies cần thiết chúng tôi sẽ sử dụng npm install:

npm install express@4.15.2

Sau khi cài đặt, chúng ta có thể tạo tệp index.js để thiết lập ứng dụng của mình.

var app = require('express')();
var http = require('http').createServer(app);

app.get(
'/', (req, res) => {
  res.send(
'<h1>Hello world</h1>');
});

http.listen(
3000, () => {
 
console.log('listening on *:3000');
});

Nó có nghĩa là:

-          Express khoiwr tạo ứng dụng để trở thành một trình xử lý chức năng mà bạn có thể cung cấp cho máy chủ HTTP

-          Chúng ta xác định một trình xử lý tuyến đường/được gọi khi chúng ta truy cập trang web.

-          Chúng ta làm ccho máy chủ HTTP lắng nghe trên cổng 3000.

Nếu bạn chạy node index.js bạn sẽ thấy như sau

Và nếu bạn truy cập trên trình duyệt: http://localhost:3000


HTML

Trong file index.js chúng ta gọi res.send và truyền thành một chuỗi của HTML. Mã của chúng tôi sẽ trông rất khó hiểu nếu chúng ta đặt toàn bộ ứng dụng trong HTML, vì thế thay thế chúng ta tạo file index.html.

Thay vào đó, hãy cấu trúc lại bộ xử lý của chúng ta sử dụng sendFile.

app.get('/', (req, res) => {
  res.sendFile(__dirname +
'/index.html');
});


 

Đặt nó như sau trong file index.html của bạn:

<!doctype html>
<html>
 
<head>
   
<title>Socket.IO chat</title>
    
<style>
      * { margin: 0; padding: 0; box-sizing: border-box; }
      body { font: 13px Helvetica, Arial; }
      form { background: #000; padding: 3px; position: fixed; bottom: 0; width: 100%; }
      form input { border: 0; padding: 10px; width: 90%; margin-right: 0.5%; }
      form button { width: 9%; background: rgb(130, 224, 255); border: none; padding: 10px; }
      #messages { list-style-type: none; margin: 0; padding: 0; }
      #messages li { padding: 5px 10px; }
      #messages li:nth-child(odd) { background: #eee; }
   
</style>
 
</head>
 
<body>
   
<ul id="messages"></ul>
   
<form action="">
     
<input id="m" autocomplete="off" /><button>Send</button>
   
</form>
 
</body>
</html>


 

Nếu bạn restart tiến trình ( bằng cách Control+C và chạy node index.js ) và refresh lại page sẽ như sau:


Tích hợp Socket.IO

Socket.IO bao gồm 2 phần:

-          Một máy chủ tích hợp với (hoặc gắn kết trên) Node.js HTTP Server socket.io

-          Một thư viện máy khách tải về phí trình duyệt socket.io-client

Trong suôt quá trình phát triển, socket.io phục vụ khách hang tự động cho chúng tôi, vì vậy chúng ta chỉ phải cài đặt một module:

npm install socket.io

Nó sẽ cài đặt module và them các dependency vào package.json


 

Bây giờ sửa file index.js them no:

var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io')(http);

app.get(
'/', (req, res) => {
  res.sendFile(__dirname +
'/index.html');
});

io.on(
'connection', (socket) => {
 
console.log('a user connected');
});

http.listen(
3000, () => {
 
console.log('listening on *:3000');
});

Lưu ý rằng tôi khởi tạo một phiên bản mới của socket.io bằng cách chuyển đối tượng http(máy chủ HTTP). Sau đó tôi lắng nghe sự kiện kết nối cho các socket và đăng nhập vào màn điều khiển.

Bây giờ trong file index.html thêm đoạn trích trước thẻ </body>

<script src="/socket.io/socket.io.js"></script>
<script>
 
var socket = io();
</script>

Đó là tất cả nhứng gì nó cần để tải socket.io-client

Nếu bạn muốn sử dụng phiên bản nội bộ của client-side js, bạn có thể tìm nó tại node_modules/socket.io-client/dist/socket.io.js.

Để ý tôi không chỉ định bất kỳ URL khi tôi gọi io(), vì nó mặc định cố gắng kết nối với máy chủ phục vụ trang.

Nếu ngay bây giờ bạn restart tiến trình và refresh trang web bạn có thể thấy màn hình hiển thị “a user connected”.

Cố gắng mở một vài tab và bạn sẽ thấy một số tin nhắn.

Mỗi socket cũng kích hoạt một sự kiện ngắt kết nối:

io.on('connection', (socket) => {
 
console.log('a user connected');
  socket.on(
'disconnect', () => {
   
console.log('user disconnected');
  });
});


 

Sau đó nếu bạn refresh một tab nhiều lần, bạn có thể thấy nó hoạt động:

Phát ra sự kiện

Ý tưởng chính phía sau socket.io là bạn có thể gửi và nhận được bất kỳ sự kiện bạn muốn, cùng với bất kỳ dữ liệu bạn muốn. Bất kỳ đối tượng nào có thể được mã hóa dưới dạng JSON sẽ làm, và dữ liệu nhị phân cũng được hỗ trợ.

Hãy tạo ra nó để khi người dung gõ một tin nhắn, máy chủ lấy nó dưới dạng tin nhắn trò chuyện. Phần section trong index.html bây giờ sẽ giống như:

<script src="/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<script>
  $(
function () {
   
var socket = io();
    $(
'form').submit(function(e) {
      e.preventDefault();
// prevents page reloading
      socket.emit(
'chat message', $('#m').val());
      $(
'#m').val('');
     
return false;
    });
  });
</script>


 

Và trong index.js chúng ta in ra sự kiện tin nhắn trò chuyện:

io.on('connection', (socket) => {
  socket.on(
'chat message', (msg) => {
   
console.log('message: ' + msg);
  });
});

 

Broadcasting

Mục tiêu tiếp theo là để chúng ta phát ra sự kiện từ máy chủ đến những người dung còn lại.

Để gửi một sự kiện tới mọi người, socket.io cung cấp cho chúng ta phương thức io.emit().

io.emit('some event', { someProperty: 'some value', otherProperty: 'other value' }); // This will emit the event to all connected sockets

Nếu bạn muốn gửi một tin nhắn tới tất cả ngoại từ một socket, chúng ta có cờ để broadcast ra từ socket:

io.on('connection', (socket) => {
  socket.broadcast.emit(
'hi');
});

Trong trường hợp, vì mục đích đơn giản, chúng tôi sẽ gửi tin nhắn cho mọi người, kết cả người gửi.

io.on('connection', (socket) => {
  socket.on(
'chat message', (msg) => {
    io.emit(
'chat message', msg);
  });
});


 

Và trên phía khách hang khi chúng tôi ghi lại một sự kiện tin nhắn trò chuyện, chúng tôi sẽ đưa nó vào trang. Tổng mã JavaScript phía máy khách như sau:

<script>
  $(
function () {
   
var socket = io();
    $(
'form').submit(function(e){
      e.preventDefault();
// prevents page reloading
      socket.emit(
'chat message', $('#m').val());
      $(
'#m').val('');
     
return false;
    });
    socket.on(
'chat message', function(msg){
      $(
'#messages').append($('<li>').text(msg));
    });
  });
</script>

Và nó hoàn thành ứng dụng trò chuyện của chúng ta, trong 20 dòng code!

Homework

Một số ý tưởng cải tiến ứng dụng:

-          Broadcast một tin nhắn cho người dung được kết nối khi ai đó kết nối hoặc ngắt kết nối

-          Thêm hỗ trợ biệt danh

-          Đừng gửi cùng một tin nhắn cho người dung đã gửi nó. Thay vào đó, hãy nối tin nhắn trực tiếp ngay khi anh ta nhấn enter.

-          Thêm “{user} is typing” chắc năng.

-          Hiển thị ai online

-          Thêm tin nhắn riêng tư

-          Chia sẻ cải tiến của bạn.

', $('#m').val());
      $(
'#m').val('');
     
return false;
    });
    socket.on(
'chat message', function(msg){
      $(
'#messages').append($('<li>').text(msg));
    });
  });
</script>

Và nó hoàn thành ứng dụng trò chuyện của chúng ta, trong 20 dòng code!

Homework

Một số ý tưởng cải tiến ứng dụng:

-          Broadcast một tin nhắn cho người dung được kết nối khi ai đó kết nối hoặc ngắt kết nối

-          Thêm hỗ trợ biệt danh

-          Đừng gửi cùng một tin nhắn cho người dung đã gửi nó. Thay vào đó, hãy nối tin nhắn trực tiếp ngay khi anh ta nhấn enter.

-          Thêm “{user} is typing” chắc năng.

-          Hiển thị ai online

-          Thêm tin nhắn riêng tư

-          Chia sẻ cải tiến của bạn.

 


Bài viết mới

Giới Thiệu Gumroad và Cơ Hội Đăng Ký Nội Dung Đặc Biệt Của Tôi

     Trong thế giới kỹ thuật số ngày nay, việc dễ dàng tiếp cận các tài nguyên học tập và công cụ hỗ trợ là rất quan trọng. Đó chính là lý d...

Bài đăng