Skip to content

cvedix/MediaToolKit

Repository files navigation

MediaToolKit — Framework lập trình mạng nhẹ, dễ dùng, dựa trên C++11

Linux macOS Windows

English

Đặc điểm dự án

  • Phát triển bằng C++11, không dùng con trỏ thô, mã nguồn ổn định và đáng tin cậy; dễ dàng chuyển sang đa nền tảng, mã nguồn rõ ràng và gọn gàng.
  • Sử dụng mô hình epoll + thread pool + async network IO, hiệu năng đồng thời vượt trội.
  • Mã nguồn đã trải qua nhiều bài kiểm tra ổn định và hiệu năng, đáp ứng yêu cầu của các dự án server thương mại.
  • Hỗ trợ các nền tảng: Linux, macOS, iOS, Android, Windows.
  • Tìm hiểu thêm: ZLMediaKit

Tính năng

  • Thư viện mạng

    • TCP/UDP client: giao diện đơn giản, thread-safe, người dùng không cần quan tâm đến socket API cụ thể.
    • TCP/UDP server: xây dựng server hiệu năng cao nhanh chóng thông qua template, chỉ cần implement logic session (lớp Session).
    • Đóng gói nhiều thao tác socket phổ biến.
  • Thư viện luồng

    • Timer đơn giản dễ dùng, hiện thực bằng thread.
    • Semaphore (đèn hiệu).
    • Thread group (nhóm luồng).
    • Thread pool đơn giản, hỗ trợ thực thi task đồng bộ hoặc bất đồng bộ, tương thích std::function và lambda expression.
  • Thư viện tiện ích

    • Thao tác file.
    • Thư viện log theo phong cách std::cout, hỗ trợ tô màu, định vị mã nguồn, in bất đồng bộ.
    • Đọc/ghi file cấu hình INI.
    • Message broadcaster theo mô hình Observer (lắng nghe sự kiện).
    • Vòng lặp bộ nhớ (resource pool) dựa trên smart pointer, không cần giải phóng thủ công.
    • Ring buffer (bộ đệm vòng), hỗ trợ hai chế độ: đọc chủ động và đọc theo sự kiện.
    • MySQL connection pool, tạo câu lệnh SQL bằng placeholder (?), hỗ trợ thao tác đồng bộ và bất đồng bộ.
    • SSL/TLS mã hóa/giải mã đơn giản, hỗ trợ đa luồng.
    • Công cụ phân tích dòng lệnh (command line parser), tiện lợi cho việc xây dựng ứng dụng có thể cấu hình.
    • Và nhiều công cụ hữu ích khác.

Hỗ trợ Network I/O

Linux (Android) Windows macOS (iOS/Unix)
Đa hóa epoll / select wepoll (iocp) / select kqueue / select
UDP recvmmsg / sendmmsg recvfrom / WSASend recvfrom / sendto
TCP recvfrom / sendmsg recvfrom / WSASend recvfrom / sendmsg

Biên dịch

Linux

  • Môi trường: Ubuntu 16.04 64-bit + GCC 5.4 (tối thiểu GCC 4.7), CMake 3.5.1
cd MediaToolKit
mkdir -p build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --parallel $(nproc)

macOS

  • Môi trường: macOS Sierra (10.12.1) + Xcode 8.3.1, Homebrew 1.1.3, CMake 3.8.0
cd MediaToolKit
mkdir -p build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
cmake --build . --parallel $(sysctl -n hw.ncpu)

iOS

  • Môi trường: Tham khảo hướng dẫn biên dịch macOS.
cd MediaToolKit
mkdir -p build && cd build
# Tạo Xcode project
cmake .. -DCMAKE_TOOLCHAIN_FILE=../cmake/iOS.cmake -DIOS_PLATFORM=SIMULATOR64 -G "Xcode"

Android

  • Môi trường: macOS Sierra + Xcode 8.3.1, Homebrew, CMake 3.8.0, android-ndk-r14b
cd MediaToolKit
export ANDROID_NDK_ROOT=/path/to/ndk
mkdir -p build && cd build
cmake .. -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake
cmake --build .

Windows

1. Mở project bằng cmake-gui và tạo file VS solution.
2. Mở file MediaToolKit.sln bằng Visual Studio 2017.
3. Chọn chế độ build Release.
4. Build lần lượt: MediaToolKit_static → MediaToolKit_shared → ALL_BUILD → INSTALL.
5. Tìm file kết quả và chạy test cases.
6. Header và library được cài vào thư mục gốc của ổ đĩa chứa source code.

Giấy phép

Mã nguồn gốc của dự án sử dụng giấy phép MIT — có thể tự do sử dụng cho mục đích thương mại và phi thương mại, miễn là giữ nguyên thông tin bản quyền.

Dự án có sử dụng một số đoạn mã nguồn mở từ bên thứ ba; nếu dùng cho mục đích thương mại, vui lòng tự kiểm tra và thay thế nếu cần. Mọi tranh chấp thương mại hoặc vi phạm bản quyền phát sinh từ việc sử dụng dự án này không liên quan đến tác giả — người dùng tự chịu trách nhiệm pháp lý.

Hỏi & Đáp (Q&A)

Hiệu năng của thư viện này như thế nào?

Dựa trên MediaToolKit, tác giả đã xây dựng một media server — ZLMediaKit. Kết quả benchmark có thể xem tại benchmark.md.

Độ ổn định của thư viện này như thế nào?

Thư viện đã được kiểm tra nghiêm ngặt bằng Valgrind và chạy thử tải nặng trong thời gian dài. Tác giả cũng đã dùng thư viện này để phát triển nhiều dự án thực tế. Thực tiễn cho thấy thư viện rất ổn định, có thể chạy liên tục nhiều tháng mà không cần script watchdog.

Gặp nhiều lỗi khi biên dịch trên Windows?

Do mã nguồn chủ yếu được phát triển trên macOS/Linux, một số file sử dụng encoding UTF-8 không có BOM. Windows xử lý UTF-8 không hoàn hảo, vì vậy nếu gặp lỗi biên dịch, hãy thử thêm BOM vào đầu file trước khi biên dịch.

Liên hệ

  • Email: 1213642868@qq.com (Vấn đề liên quan đến dự án hoặc lập trình mạng vui lòng tạo Issue, không trả lời qua email trực tiếp)
  • QQ Group: 542509000

About

A simple, easy-to-use, and lightweight network programming framework based on C++11.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors