<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # swoole\_event\_add [TOC] 將一個socket加入到底層的`reactor`事件監聽中。此函數可以用在`Server`或`Client`模式下。 ## 函數原型 ~~~ bool swoole_event_add(mixed $sock, mixed $read_callback, mixed $write_callback = null, int $flags = null); ~~~ ## 參數 參數1`$sock`可以為以下四種類型: * `int`,就是文件描述符,包括`swoole_client->$sock`、`swoole_process->$pipe`或者其他`fd` * `stream`資源,就是`stream_socket_client/fsockopen`創建的資源 * `sockets`資源,就是`sockets`擴展中`socket_create`創建的資源,需要在編譯時加入`./configure --enable-sockets` * `object`,`swoole_process`或`swoole_client`,底層自動轉換為管道或客戶端連接的`socket` 參數2`$read_callback`為可讀事件回調函數,參數3`$write_callback`為可寫事件回調函數,此參數可以是字符串函數名、對象+方法、類靜態方法或匿名函數,當此`socket`可讀或者可寫時回調指定的函數。 參數4`$flags`為事件類型的掩碼,可選擇關閉/開啟可讀可寫事件,如`SWOOLE_EVENT_READ`,`SWOOLE_EVENT_WRITE`,或者`SWOOLE_EVENT_READ | SWOOLE_EVENT_WRITE` ~~~ 在 Server 程序中使用時,必須在 Worker 進程啟動后使用。在 Server::start 之前不得調用任何異步 IO 接口 ~~~ ## 返回值 * 添加事件監聽成功成功返回`true` * 添加失敗返回`false`,請使用`swoole_last_error`獲取錯誤碼 * 已添加過的`socket`不能重復添加,可以使用`swoole_event_set`修改`socket`對應的回調函數和事件類型 > 使用`swoole_event_add`將`socket`加入到事件監聽后,底層會自動將該`socket`設置為非阻塞模式 ## 使用實例 ~~~ $fp = stream_socket_client("tcp://www.qq.com:80", $errno, $errstr, 30); fwrite($fp,"GET / HTTP/1.1\r\nHost: www.qq.com\r\n\r\n"); swoole_event_add($fp, function($fp) { $resp = fread($fp, 8192); //socket處理完成后,從epoll事件中移除socket swoole_event_del($fp); fclose($fp); }); echo "Finish\n"; //swoole_event_add不會阻塞進程,這行代碼會順序執行 ~~~ ## 回調函數 * 在可讀事件回調函數中必須使用`fread`、`recv`等函數讀取`socket`緩存區中的數據,否則事件會持續觸發,如果不希望繼續讀取必須使用`Swoole\Event::del`移除事件監聽 * 在可寫事件回調函數中,寫入`socket`之后必須調用`Swoole\Event::del`移除事件監聽,否則可寫事件會持續觸發 * 執行`fread`、`socekt_recv`、`socket_read`、`Swoole\Client::recv`返回`false`,并且錯誤碼為`EAGAIN`時表示當前`socket`接收緩存區內沒有任何數據,這時需要加入可讀監聽等待`EventLoop`通知 * 執行`fwrite`、`socket_write`、`socket_send`、`Swoole\Client::send`操作返回`false`,并且錯誤碼為`EAGAIN`時表示當前`socket`發送緩存區已滿,暫時不能發送數據。需要監聽可寫事件等待`EventLoop`通知
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看