Create a common DAEMON
$worker = new Worker(); $worker::$pidFile = $config['pid']; $worker::$logFile = $config['log']; $worker->name = $config['title']; $worker->count = $config['num']; $worker->onWorkerStart = function($worker){ //執(zhí)行一個回調(diào)函數(shù) call_user_func('******'); }; Worker::runAll();
Create a scheduled task (supports second level)
<?php use \Workerman\Worker; use \Workerman\Lib\Timer; require_once './Workerman/Autoloader.php'; $task = new Worker(); // 開啟多少個進(jìn)程運行定時任務(wù),注意多進(jìn)程并發(fā)問題 $task->count = 1; $task->onWorkerStart = function($task) { // 每1秒執(zhí)行一次 支持小數(shù),可以精確到0.001,即精確到毫秒級別 $time_interval = 1; Timer::add($time_interval, function() { echo "****\n"; }); }; Worker::runAll();
php sends messages to the client in real time
1. Create a websocket Worker to maintain a long client connection
2. websocket Establish a text Worker inside the Worker
3. The websocket Worker and the text Worker are the same process and can easily share the client connection
4. An independent php background system communicates with the text worker through the text protocol text Worker communication
5. Text Worker operates websocket connection to complete data push
push.php
<?php use Workerman\Worker; require_once './Workerman/Autoloader.php'; // 初始化一個worker容器,監(jiān)聽1234端口 $worker = new Worker('websocket://0.0.0.0:1234'); /* * 注意這里進(jìn)程數(shù)必須設(shè)置為1,否則會報端口占用錯誤 * (php 7可以設(shè)置進(jìn)程數(shù)大于1,前提是$inner_text_worker->reusePort=true) */ $worker->count = 1; // worker進(jìn)程啟動后創(chuàng)建一個text Worker以便打開一個內(nèi)部通訊端口 $worker->onWorkerStart = function($worker) { // 開啟一個內(nèi)部端口,方便內(nèi)部系統(tǒng)推送數(shù)據(jù),Text協(xié)議格式 文本+換行符 $inner_text_worker = new Worker('text://0.0.0.0:5678'); $inner_text_worker->onMessage = function($connection, $buffer) { // $data數(shù)組格式,里面有uid,表示向那個uid的頁面推送數(shù)據(jù) $data = json_decode($buffer, true); $uid = $data['uid']; // 通過workerman,向uid的頁面推送數(shù)據(jù) $ret = sendMessageByUid($uid, $buffer); // 返回推送結(jié)果 $connection->send($ret ? 'ok' : 'fail'); }; // ## 執(zhí)行監(jiān)聽 ## $inner_text_worker->listen(); }; // 新增加一個屬性,用來保存uid到connection的映射 $worker->uidConnections = array(); // 當(dāng)有客戶端發(fā)來消息時執(zhí)行的回調(diào)函數(shù) $worker->onMessage = function($connection, $data) { global $worker; // 判斷當(dāng)前客戶端是否已經(jīng)驗證,既是否設(shè)置了uid if(!isset($connection->uid)) { // 沒驗證的話把第一個包當(dāng)做uid(這里為了方便演示,沒做真正的驗證) $connection->uid = $data; /* 保存uid到connection的映射,這樣可以方便的通過uid查找connection, * 實現(xiàn)針對特定uid推送數(shù)據(jù) */ $worker->uidConnections[$connection->uid] = $connection; return; } }; listen // 當(dāng)有客戶端連接斷開時 $worker->onClose = function($connection) { global $worker; if(isset($connection->uid)) { // 連接斷開時刪除映射 unset($worker->uidConnections[$connection->uid]); } }; // 向所有驗證的用戶推送數(shù)據(jù) function broadcast($message) { global $worker; foreach($worker->uidConnections as $connection) { $connection->send($message); } } // 針對uid推送數(shù)據(jù) function sendMessageByUid($uid, $message) { global $worker; if(isset($worker->uidConnections[$uid])) { $connection = $worker->uidConnections[$uid]; $connection->send($message); return true; } return false; } // 運行所有的worker Worker::runAll();
Start back-end service
php push.php start -d
Front-end code
var ws = new WebSocket('ws://127.0.0.1:1234'); ws.onopen = function(){ var uid = 'uid1'; ws.send(uid); }; ws.onmessage = function(e){ alert(e.data); };
php back-end code
// 建立socket連接到內(nèi)部推送端口 $client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1); // 推送的數(shù)據(jù),包含uid字段,表示是給這個uid推送 $data = array('uid'=>'uid1', 'percent'=>'88%'); // 發(fā)送數(shù)據(jù),注意5678端口是Text協(xié)議的端口,Text協(xié)議需要在數(shù)據(jù)末尾加上換行符 fwrite($client, json_encode($data)."\n"); // 讀取推送結(jié)果 echo fread($client, 8192);
Build a simple webserver
use \Workerman\Worker; use \Workerman\WebServer; require_once __DIR__ . '/Workerman/Autoloader.php'; // 這里監(jiān)聽8080端口,如果要監(jiān)聽80端口,需要root權(quán)限,并且端口沒有被其它程序占用 $webserver = new WebServer('http://0.0.0.0:8080'); // 類似nginx配置中的root選項,添加域名與網(wǎng)站根目錄的關(guān)聯(lián),可設(shè)置多個域名多個目錄 $webserver->addRoot('www.example.com', '/your/path/of/web/'); $webserver->addRoot('blog.example.com', '/your/path/of/blog/'); // 設(shè)置開啟多少進(jìn)程 $webserver->count = 4; Worker::runAll();
PHP中文網(wǎng), there are a large number of free workerman introductory tutorials, everyone is welcome to learn!
The above is the detailed content of What are the steps to use workerman?. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

To implement file upload and download in Workerman documents, specific code examples are required. Introduction: Workerman is a high-performance PHP asynchronous network communication framework that is simple, efficient, and easy to use. In actual development, file uploading and downloading are common functional requirements. This article will introduce how to use the Workerman framework to implement file uploading and downloading, and give specific code examples. 1. File upload: File upload refers to the operation of transferring files on the local computer to the server. The following is used

Many users like to install the PC version of the Android emulator on their computers so that they can run various mobile games and applications on their computers, but there are still some people who don’t know how to use it. Let’s take a look at how to use the win10 emulator. 1. First download and install the Thunderbolt Simulator and open it. Open the Thunderbolt Game Center on the simulator desktop. There is a search box in the upper right corner of the Game Center. 2. Click the search box and enter the name of the game you want to find. 3. Click Install in the search results. 4. Wait patiently and the game will be installed in the emulator. You can also see the game icon when you return to the desktop. Click to start the game.

Swoole and Workerman are both high-performance PHP server frameworks. Known for its asynchronous processing, excellent performance, and scalability, Swoole is suitable for projects that need to handle a large number of concurrent requests and high throughput. Workerman offers the flexibility of both asynchronous and synchronous modes, with an intuitive API that is better suited for ease of use and projects that handle lower concurrency volumes.

Introduction to how to implement the basic usage of Workerman documents: Workerman is a high-performance PHP development framework that can help developers easily build high-concurrency network applications. This article will introduce the basic usage of Workerman, including installation and configuration, creating services and listening ports, handling client requests, etc. And give corresponding code examples. 1. Install and configure Workerman. Enter the following command on the command line to install Workerman: c

How to implement the timer function in the Workerman document Workerman is a powerful PHP asynchronous network communication framework that provides a wealth of functions, including the timer function. Use timers to execute code within specified time intervals, which is very suitable for application scenarios such as scheduled tasks and polling. Next, I will introduce in detail how to implement the timer function in Workerman and provide specific code examples. Step 1: Install Workerman First, we need to install Worker

How to implement the reverse proxy function in the Workerman document requires specific code examples. Introduction: Workerman is a high-performance PHP multi-process network communication framework that provides rich functions and powerful performance and is widely used in Web real-time communication and long connections. Service scenarios. Among them, Workerman also supports the reverse proxy function, which can realize load balancing and static resource caching when the server provides external services. This article will introduce how to use Workerman to implement the reverse proxy function.

Workerman development: real-time video call based on UDP protocol Summary: This article will introduce how to use the Workerman framework to implement real-time video call function based on UDP protocol. We will have an in-depth understanding of the characteristics of the UDP protocol and show how to build a simple but complete real-time video call application through code examples. Introduction: In network communication, real-time video calling is a very important function. The traditional TCP protocol may have problems such as transmission delays when implementing high-real-time video calls. And UDP

How to use Workerman to build a high-availability load balancing system requires specific code examples. In the field of modern technology, with the rapid development of the Internet, more and more websites and applications need to handle a large number of concurrent requests. In order to achieve high availability and high performance, the load balancing system has become one of the essential components. This article will introduce how to use the PHP open source framework Workerman to build a high-availability load balancing system and provide specific code examples. 1. Introduction to Workerman Worke
