socket可写事件怎么触发

wuxian
public function send($send_buffer, $raw = false)
   ....
            Worker::$globalEvent->add($this->_socket, EventInterface::EV_WRITE, array($this, 'baseWrite'));
            // Check if the send buffer will be full.
            $this->checkBufferWillFull();
            return;
        }

        if ($this->bufferIsFull()) {
            ++self::$statistics['send_fail'];
            return false;
        }

        $this->_sendBuffer .= $send_buffer;
        // Check if the send buffer is full.
        $this->checkBufferWillFull();
    }

walkor大佬, 这里的添加了可写事件,怎么触发这个可写事件呢,

阅读 499
2个回答

William A

可以用下面的代码测试一下,发送大量数据。

<?php
require_once "../../vendor/autoload.php";

use Workerman\Worker;

$tcp_worker = new Worker("tcp://0.0.0.0:10003");

$tcp_worker->count = 4;

$tcp_worker->onMessage = function ($conn, $data) {
    $arr = array_fill(0, 1000000, 'a');
    $str = implode(',', $arr);
    echo strlen($str), "\n";
    $conn->send($str);
};

Worker::runAll();
  • 暂无评论
walkor

操作系统会将socket可写可读事件通过 select 或者 epoll的方法通知业务进程。业务进程通过调用 select 或者 epoll 来接收这个事件。

  • 暂无评论