Ví dụ phát triển đơn giản
Cài đặt
Cài đặt workerman
Chạy trong một thư mục trống
composer require workerman/workerman
Ví dụ 1, Sử dụng giao thức HTTP để cung cấp dịch vụ Web
Tạo tệp start.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
use Workerman\Protocols\Http\Request;
require_once __DIR__ . '/vendor/autoload.php';
// Tạo một Worker lắng nghe cổng 2345, sử dụng giao thức http để giao tiếp
$http_worker = new Worker("http://0.0.0.0:2345");
// Khởi động 4 tiến trình để cung cấp dịch vụ
$http_worker->count = 4;
// Khi nhận dữ liệu từ trình duyệt gửi phản hồi hello world cho trình duyệt
$http_worker->onMessage = function(TcpConnection $connection, Request $request)
{
// Gửi hello world đến trình duyệt
$connection->send('hello world');
};
// Chạy worker
Worker::runAll();
Chạy từ dòng lệnh (người dùng windows sử dụng cmd命令行,giống như sau)
php start.php start
Kiểm tra
Giả sử địa chỉ ip của máy chủ là 127.0.0.1
Truy cập vào URL http://127.0.0.1:2345 trong trình duyệt
Lưu ý:
1、Nếu xuất hiện tình trạng không thể truy cập, hãy tham khảo phần Nguyên nhân kết nối khách hàng thất bại để kiểm tra.
2、Máy chủ sử dụng giao thức http, chỉ có thể giao tiếp bằng giao thức http, không thể giao tiếp trực tiếp bằng các giao thức khác như websocket.
Ví dụ 2, Sử dụng giao thức WebSocket để cung cấp dịch vụ
Tạo tệp ws_test.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// Lưu ý: Đây khác với ví dụ trước, sử dụng giao thức websocket
$ws_worker = new Worker("websocket://0.0.0.0:2000");
// Khởi động 4 tiến trình để cung cấp dịch vụ
$ws_worker->count = 4;
// Khi nhận dữ liệu từ khách hàng gửi trả hello $data cho khách hàng
$ws_worker->onMessage = function(TcpConnection $connection, $data)
{
// Gửi hello $data đến khách hàng
$connection->send('hello ' . $data);
};
// Chạy worker
Worker::runAll();
Chạy từ dòng lệnh
php ws_test.php start
Kiểm tra
Mở trình duyệt chrome, nhấn F12 để mở bảng điều khiển gỡ lỗi, nhập vào mục Console (hoặc dán mã dưới đây vào trang html để chạy bằng js)
// Giả sử địa chỉ ip của máy chủ là 127.0.0.1
ws = new WebSocket("ws://127.0.0.1:2000");
ws.onopen = function() {
alert("Kết nối thành công");
ws.send('tom');
alert("Gửi một chuỗi tới máy chủ: tom");
};
ws.onmessage = function(e) {
alert("Nhận tin nhắn từ máy chủ: " + e.data);
};
Lưu ý:
1、Nếu xuất hiện tình trạng không thể truy cập, hãy tham khảo phần Câu hỏi thường gặp - Kết nối thất bại để kiểm tra.
2、Máy chủ sử dụng giao thức websocket, chỉ có thể giao tiếp bằng giao thức websocket, không thể giao tiếp trực tiếp bằng các giao thức khác như http.
Ví dụ 3, Truyền dữ liệu trực tiếp bằng TCP
Tạo tệp tcp_test.php
<?php
use Workerman\Worker;
use Workerman\Connection\TcpConnection;
require_once __DIR__ . '/vendor/autoload.php';
// Tạo một Worker lắng nghe cổng 2347, không sử dụng bất kỳ giao thức ứng dụng nào
$tcp_worker = new Worker("tcp://0.0.0.0:2347");
// Khởi động 4 tiến trình để cung cấp dịch vụ
$tcp_worker->count = 4;
// Khi khách hàng gửi dữ liệu
$tcp_worker->onMessage = function(TcpConnection $connection, $data)
{
// Gửi hello $data đến khách hàng
$connection->send('hello ' . $data);
};
// Chạy worker
Worker::runAll();
Chạy từ dòng lệnh
php tcp_test.php start
Kiểm tra: Chạy từ dòng lệnh
(Các lệnh dưới đây là hiệu ứng từ dòng lệnh linux, có thể khác với hiệu ứng dưới windows)
telnet 127.0.0.1 2347
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
tom
hello tom
Lưu ý:
1、Nếu xuất hiện tình trạng không thể truy cập, hãy tham khảo phần Câu hỏi thường gặp - Kết nối thất bại để kiểm tra.
2、Máy chủ sử dụng giao thức tcp thuần túy, không thể giao tiếp trực tiếp bằng các giao thức khác như websocket, http.