gpt4 book ai didi

php - 带有 libevent 的多进程 php

转载 作者:可可西里 更新时间:2023-11-01 13:23:28 27 4
gpt4 key购买 nike

我能够使用 libevent 制作一个简单的 php websocket 服务器,但是当我试图让它进行多处理时我被卡住了。

例如这是单处理

<?php
$socket = stream_socket_server ('tcp://0.0.0.0:2000', $errno, $errstr);
stream_set_blocking($socket, 0);
$base = event_base_new();
$event = event_new();
event_set($event, $socket, EV_READ | EV_PERSIST, 'ev_accept', $base);
event_base_set($event, $base);
event_add($event);
event_base_loop($base);

$GLOBALS['connections'] = array();
$GLOBALS['buffers'] = array();

function ev_accept($socket, $flag, $base) {
static $id = 0;

$connection = stream_socket_accept($socket);
stream_set_blocking($connection, 0);

$id += 1;

$buffer = event_buffer_new($connection, 'ev_read', NULL, 'ev_error', $id);
event_buffer_base_set($buffer, $base);
event_buffer_timeout_set($buffer, 30, 30);
event_buffer_watermark_set($buffer, EV_READ, 0, 0xffffff);
event_buffer_priority_set($buffer, 10);
event_buffer_enable($buffer, EV_READ | EV_PERSIST);

// we need to save both buffer and connection outside
$GLOBALS['connections'][$id] = $connection;
$GLOBALS['buffers'][$id] = $buffer;
}

function ev_error($buffer, $error, $id) {
event_buffer_disable($GLOBALS['buffers'][$id], EV_READ | EV_WRITE);
event_buffer_free($GLOBALS['buffers'][$id]);
fclose($GLOBALS['connections'][$id]);
unset($GLOBALS['buffers'][$id], $GLOBALS['connections'][$id]);
}

function ev_read($buffer, $id) {
while ($read = event_buffer_read($buffer, 256)) {
var_dump($read);
}
}
?>

但是当我在函数 ev_read 中执行此操作时

     function ev_read($buffer, $id) {
while ($read = event_buffer_read($buffer, 256)) {
$pid = pcntl_fork();
switch ($pid) {
case -1: // Error
die('Fork failed, your system is b0rked!');
break;
case 0: // Child
event_buffer_write($buffer,"asdawdasd");

exit(0);
break;


}
} }

它不发送数据...

那么我怎样才能制作一个多处理的 php 套接字服务器呢?

最佳答案

虽然 nanoserv 是一个优秀的库,但它不使用 libevent。事实上,作者本人在他的博客中写道,他想在某个时间点将 nanoserv 转换为使用 libevent。在此处查看他的博客文章:http://blog.si.kz/index.php/2010/02/03/libevent-for-php

Alix Axel 在 2011 年 5 月 22 日 12:19 也发表了评论。

更新:更多的研究让我找到了 http://phpdaemon.net/ .看起来他们正在使用 libevent 构建一整套网络服务器

2021 年 5 月 30 日更新:最近有https://www.swoole.co.uk/ & https://reactphp.org/它为套接字提供了良好的异步库。

phpdaemon 在 https://daemon.io/ 有一个新的 url

2022 年 8 月 31 日更新:Swoole 现在已经 fork 成两个独立的项目:Open Swoole & Swoole

关于php - 带有 libevent 的多进程 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5720966/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com