- 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
-
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::functionvà 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.
| 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 |
- 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)- 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)- 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"- 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 .- Môi trường: Windows 10, Visual Studio 2017, OpenSSL, MySQL Client, CMake GUI
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.
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ý.
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.
- 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