<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>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 概述 azjezz/psl 是一個PHP標準庫(PHP Standard Library)項目。這個項目是一個為PHP程序員提供的一致性、集中化且類型良好的API集合。它受到hhvm/hsl的啟發,旨在為PHP開發提供的一套現代化、一致性、集中化、良好類型化、非阻塞的 API 集合工具集,從而簡化開發過程并提高代碼的可維護性和可移植性。提高 PHP 編程的效率和一致性,通過提供一套標準化的 API 來簡化開發過程。 ## 特點 * **目標**:為PHP程序員提供一套標準的、集中的、類型良好的API。 * **靈感來源**:該項目受到`hhvm/hsl`的啟發,后者是HHVM(HipHop Virtual Machine,一種由Facebook開發的PHP執行引擎)的標準庫。 * **功能**:通過其API集合,該庫提供了多種功能。如:異步編程支持(通過Async命名空間)、TCP連接管理(通過TCP命名空間)、輸入輸出操作(通過IO命名空間)、Shell命令執行(通過Shell命名空間)以及字符串處理(通過Str命名空間)等。 * **安裝**:該項目支持通過Composer進行安裝,這是PHP的一個依賴管理工具,允許你聲明項目所依賴的外部庫。 * **集成**:該項目提供了與`Psalm`和`PHPStan`的集成支持,`Psalm`是一個PHP靜態分析工具,而`PHPStan`是另一個流行的PHP靜態分析工具,這有助于開發者在開發過程中發現并修復潛在的問題。 ## 安裝 libsodium ``` sudo /usr/local/php-8.3.1/bin/pecl install -f libsodium ``` 安裝 `azjezz/psl` ``` /usr/local/php-8.3.1/bin/php composer require azjezz/psl ``` ## 異步協作 > **協作式多工(Cooperative Multitasking)**:是一種多工處理方式,多工是使電腦能同時處理多個程序的技術,相對于搶占式多工(Preemptive multitasking)由操作系統決定任務切換時機。協作式多工要求每一個運行中的程序,定時放棄(yield)自己的執行權利,告知操作系統可讓下一個程序執行[1][2],因為需要程序之間合作達到調度,故稱作協作式多工。 在多工處理中,處理器(CPU)會在相對于用戶來說極短的時間內,依次分配處理能力給不同的程序,以實現看似同時運行多個程序的效果。舉例來說,當你同時使用瀏覽器瀏覽網頁和播放MP3音樂時,CPU會快速切換處理能力,讓你感覺網頁在下卷時音樂仍在播放。然而,如果其中一個程序出現問題,例如因為設計不良或出現故障而無法釋放執行權,這樣的行為會導致整個操作系統停頓,甚至死機。因此,在開發軟件時,需要注意程序的質量和穩定性,避免出現此類問題,以確保系統的穩定運行。 維基百科:https://zh.wikipedia.org/wiki/%E5%8D%8F%E4%BD%9C%E5%BC%8F%E5%A4%9A%E4%BB%BB%E5%8A%A1 > Async組件構建在[RevoltPHP](https://github.com/revoltphp/event-loop)之上,這使得它與[Amphp](https://github.com/amphp)和其他使用相同事件循環的庫兼容。 RevoltPHP:https://github.com/revoltphp/event-loop #### 簡單使用 ``` Async\main(static function(): int { $watcher = Async\Scheduler::onSignal(SIGINT, function (): never { IO\write_error_line('SIGINT received, stopping...'); exit(0); }); Async\Scheduler::unreference($watcher); IO\write_line('Hello, World!'); [$version, $connection] = Async\concurrently([ static fn() => Shell\execute('php', ['-v']), static fn() => TCP\connect('172.30.237.24', 2023), ]); $messages = Str\split($version, "\n"); IO\write_line('php, -v!'.json_encode($messages)); foreach($messages as $message) { $connection->writeAll($message); } $connection->close(); return 0; }); ``` 輸出 ``` Hello, World! php, -v!["PHP 8.3.1 (cli) (built: Dec 25 2023 21:14:50) (NTS)","Copyright (c) The PHP Group","Zend Engine v4.3.1, Copyright (c) Zend Technologies",""] ``` ## 密碼組件 ```php <?php /** * @desc password.php * @author Tinywan(ShaoBo Wan) * @date 2024/8/15 19:35 */ declare(strict_types=1); require 'vendor/autoload.php'; use function \Psl\Password\hash; use function \Psl\Password\verify; use function \Psl\Password\get_information; use function \Psl\Password\needs_rehash; /** 1. 加密密碼 */ $password = 'Resty2024'; $hash = hash($password); echo '[x] 加密Hash:'. $hash . PHP_EOL; /** 2. 驗證密碼 */ $check = verify($password,$hash); echo '[x] 驗證結果:'. $check . PHP_EOL; /** 3. 獲取hash信息 */ $informatio = get_information($hash); echo '[x] 獲取Hash:'. json_encode($informatio) . PHP_EOL; /** 4. 刷新重置hash值 */ needs_rehash($hash); ``` 執行輸出 ``` [x] 加密Hash:$2y$10$//WxKTrzGmyqH50vWXygyeEvuwevBE6gTo.t3ucj07PxToIPnKdQW [x] 驗證結果:1 [x] 獲取Hash:{"algorithm":"bcrypt","options":{"cost":10}} ``` ## Unix套接字 ```php <?php /** * @desc concurrent.php * @author Tinywan(ShaoBo Wan) * @date 2024/8/15 20:12 */ declare(strict_types=1); use Psl\Async; use Psl\Filesystem; use Psl\IO; use Psl\Str; use Psl\Unix; require __DIR__.'/vendor/autoload.php'; Async\main(static function (): int { if (PHP_OS_FAMILY === 'Windows') { IO\write_error_line('This example requires does not support Windows.'); return 0; } $file = Filesystem\create_temporary_file(prefix: 'psl-examples') . ".sock"; Async\concurrently([ 'server' => static function () use ($file): void { $server = Unix\Server::create($file); IO\write_error_line('< server is listening.'); $connection = $server->nextConnection(); IO\write_error_line('< connection received.'); IO\write_error_line('< awaiting request.'); $request = $connection->read(); IO\write_error_line('< received request: "%s".', $request); IO\write_error_line('< sending response.'); $connection->writeAll(Str\reverse($request)); $connection->close(); IO\write_error_line('< connection closed.'); $server->close(); IO\write_error_line("< server stopped\n"); }, 'client' => static function () use ($file): void { $client = Unix\connect($file); IO\write_error_line('> client connected.'); IO\write_error_line('> sending request.'); $client->writeAll('Hello, World!'); IO\write_error_line('> awaiting response.'); $response = $client->readAll(); IO\write_error_line('> received response: "%s".', $response); $client->close(); IO\write_error_line('> client disconnected.'); }, ]); return 0; }); ``` 執行輸出 ``` < server is listening. < connection received. < awaiting request. > client connected. > sending request. > awaiting response. < received request: "Hello, World!". < sending response. < connection closed. < server stopped > received response: "!dlroW ,olleH". > client disconnected. ``` ## TCP并行 ``` <?php /** * @desc tcp.php * @author Tinywan(ShaoBo Wan) */ declare(strict_types=1); require 'vendor/autoload.php'; use Psl\Async; use Psl\IO; use Psl\Str; use Psl\TCP; Async\main(static function (): int { Async\concurrently([ 'server' => static function (): void { $server = TCP\Server::create('localhost', 20248); IO\write_error_line('< server is listening.'); $connection = $server->nextConnection(); IO\write_error_line('< connection received.'); IO\write_error_line('< awaiting request.'); $request = $connection->read(); IO\write_error_line('< received request: "%s".', $request); IO\write_error_line('< sending response.'); $connection->writeAll(Str\reverse($request)); $connection->close(); IO\write_error_line('< connection closed.'); $server->close(); IO\write_error_line('< server stopped.'); }, 'client' => static function (): void { $client = TCP\connect('localhost', 20248); IO\write_error_line('> client connected'); IO\write_error_line('> sending request'); $client->writeAll('Hello, World!'); IO\write_error_line('> awaiting response'); $response = $client->readAll(); IO\write_error_line('> received response: "%s".', $response); $client->close(); IO\write_error_line('> client disconnected'); }, ]); return 0; }); ``` > 以上監聽:`20248` 端口 執行輸出 ```ts < server is listening. < connection received. < awaiting request. > client connected > sending request > awaiting response < received request: "Hello, World!". < sending response. < connection closed. < server stopped. > received response: "!dlroW ,olleH". > client disconnected ```
                  <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>

                              哎呀哎呀视频在线观看