入门指引 Server Client Process AsyncIO Memory HttpServer WebSocket 高级 其他

发布于 2015-08-09 09:49:35 | 405 次阅读 | 评论: 0 | 来源: 网络整理

swoole_event_add函数用于将一个socket加入到swoole的reactor事件监听中。此函数可以用在Server或Client模式下。 函数原型:

bool swoole_event_add(int $sock, mixed $read_callback, mixed $write_callback = null, int $event_flag = null);

参数1可以为以下三种类型:

  • int,就是文件描述符,包括swoole_client的socket,以及第三方扩展的socket(比如mysql)
  • stream资源,就是stream_socket_client/fsockopen 创建的资源
  • sockets资源,就是sockets扩展中 socket_create创建的资源 需要在编译时加入 ./configure --enable-sockets

参数2为可读回调函数,参数3为可写事件回调,可以是字符串函数名、对象+方法、类静态方法或匿名函数,当此socket可读时回调指定的函数。

swoole_event_add在swoole1.6.2+之后可用
第3,4个参数在1.7.1版本后可用,用于监听可写事件回调,以及设置读写事件的监听

参数4为事件类型的掩码,可选择关闭/开启可读可写事件,如SWOOLE_EVENT_READ,SWOOLE_EVENT_WRITE,或者SWOOLE_EVENT_READ | SWOOLE_EVENT_WRITE

在Server程序中使用,可以理解为在worker/taskworker进程中将此socket注册到epoll事件中。
在Client程序中使用,可以理解为在客户端进程中将此socket注册到epoll事件中。

<?php
$db = new mysqli;
$db->connect('127.0.0.1', 'root', 'root', 'test');
$db->query("show tables", MYSQLI_ASYNC);
swoole_event_add(swoole_get_mysqli_sock($db), function($db_sock) {
    global $db;
    $res = $db->reap_async_query();
    var_dump($res->fetch_all(MYSQLI_ASSOC));
    swoole_event_del(swoole_get_mysqli_sock($db)); // socket处理完成后,从epoll事件中移除socket 
});
$db2 = new mysqli;
$db2->connect('127.0.0.1', 'root', 'root', 'test');
$db2->query("show tables", MYSQLI_ASYNC);
swoole_event_add(swoole_get_mysqli_sock($db2), function($db_sock) {
    global $db2;
    $res = $db2->reap_async_query();
    var_dump($res->fetch_all(MYSQLI_ASSOC));
    swoole_event_del(swoole_get_mysqli_sock($db2)); // socket处理完成后,从epoll事件中移除socket 
});
echo "Finishn";  //swoole_event_add不会阻塞进程,这行代码会顺序执行
最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务