php - PHP 可以异步使用套接字吗?

标签 php sockets scripting asynchronous webserver

典型的 PHP 套接字功能是同步的,并在等待传入的连接和数据时暂停线程。 (例如 socket_readsocket_listen )

如何异步执行相同的操作?这样我就可以在数据接收事件中响应数据,而不是轮询数据等。

最佳答案

是的,这就是 socket_set_nonblock() 的用途。考虑到错误代码 11、EWOULDBLOCK 和 115、EINPROGRESS 假定的特殊含义,您的套接字交互代码需要以不同的方式编写。

根据要求,这里有一些来自 PHP 同步套接字轮询循环的虚构示例代码:

$buf = '';
$done = false;
do {
    $chunk = socket_read($sock, 4096);
    if($chunk === false) {
        $error = socket_last_error($sock);
        if($error != 11 && $error != 115) {
            my_error_handler(socket_strerror($error), $error);
            $done = true;
        }
        break;
    } elseif($chunk == '') {
        $done = true;
        break;
    } else { 
        $buf .= $chunk;
    }
} while(true);

关于php - PHP 可以异步使用套接字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1432477/

相关文章:

linux - 刷新 tx udp 套接字内核缓冲区以减少延迟

php - 是否可以通过执行查询导出 MySQL 数据库?

php - Laravel 将内容放入 php 文件中?

php 记录 403 错误

user-interface - 非常简单、简洁和容易的 GUI 编程 “frameworks”

linux - 如何将参数从网页传递给程序?

python - 从 header 和部分有效负载中提取内容

php - phpseclib-尝试连接到HP Procurve交换机返回错误:不支持SSH命令执行

c++ - 比较从 C 中的套接字接收的字符串数据

python - HTTP服务器 : "Cannot assign requested address" on localhost vs 127. 0.0.1