PHP中event扩展简单使用
php
php, swoole
字数统计: 768(字)
阅读时长: 3(分)
参考资料
PHP中Event扩展安装:https://blog.mailjob.net/posts/877067227.html
EventBase 类:https://www.php.net/manual/zh/class.eventbase.php
注册事件函数(Event::__construct):https://www.php.net/manual/zh/event.construct.php
添加事件函数(Event::add):https://www.php.net/manual/zh/event.add.php
创建应用监督事件函数(EventBase::__construct):https://www.php.net/manual/zh/eventbase.construct.php
调度未决事件(EventBase::loop):https://www.php.net/manual/zh/eventbase.loop.php
Event预定义常量
参考文档:https://www.php.net/manual/zh/class.event.php#event.constants.read
| Event-flags |
函数描述 |
| Event::READ |
此标志表示当所提供的文件描述符(通常是流资源或套接字)准备好可读取时活动的事件。 |
| Event::WRITE |
标志表示当提供的文件描述符(通常是流资源或套接字)准备好写入时活动的事件。 |
| Event::SIGNAL |
用于实现信号检测。参见下面的“构造信号事件” |
| Event::TIMEOUT |
这个Event::TIMEOUT在构造事件时忽略标志:可以在事件发生时设置超时。加或者不是。设置为 $什么 当超时发生时,回调函数的参数 |
代码测试
代码下载
https://github.com/mailjobblog/dev_swoole/tree/master/210519_event
轮询Event测试
基于php原生的 event 事件类,实现一个简单的定时轮询任务
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| <?php
$eventBase = new EventBase();
$event = new Event($eventBase, -1, Event::TIMEOUT | Event::PERSIST, function(){ echo microtime(true). ": 我第一次来了\n"; });
$event->add(2);
$event1 = new Event($eventBase, -1, Event::TIMEOUT | Event::PERSIST, function(){ echo microtime(true). ": 嘎嘎嘎嘎,我又来了\n"; }); $event1->add(0.5);
$eventBase->loop();
|

Event的Socket测试
代码下载
https://github.com/mailjobblog/dev_swoole/tree/master/210519_event/event_socket
代码
event_socket_server.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <?php
$socket = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr);
$eventBase = new EventBase();
$event = new Event($eventBase, $socket, Event::READ | Event::WRITE | Event::PERSIST, function($socket) {
$connect = stream_socket_accept($socket); $read = fread($connect, 65535); var_dump($read); fwrite($connect,"this is eventSocketServer \n"); fclose($connect);
});
$event->add();
$eventBase->loop();
|
event_socket_client.php
1 2 3 4 5 6
| <?php $fp = stream_socket_client("tcp://127.0.0.1:8000");
fwrite($fp, "niHaoYa");
var_dump(fread($fp,65535));
|


Swoole 实现 Event 事件
代码下载
https://github.com/mailjobblog/dev_swoole/tree/master/210519_event/event_swoole
代码
swoole_event.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?php $server = stream_socket_server("tcp://0.0.0.0:8000", $errno, $errstr); var_dump($server);
Swoole\Event::add($server, function($socket){ $conn = stream_socket_accept($socket); Swoole\Event::add($conn, function($socket){ var_dump(fread($socket, 65535)); fwrite($socket, 'The local time is ' . date('n/j/Y g:i a') . "\n"); Swoole\Event::del($socket); fclose($socket); }); });
|
client.php
1 2 3 4 5 6
| <?php $fp = stream_socket_client("tcp://127.0.0.1:8000");
fwrite($fp, "niHaoYa6666666666666666");
var_dump(fread($fp,65535));
|

