最新的swoole-cli已可以支持Windows,手把手帶你在windows體驗swoole

InfoQ 2022-07-23 22:03:23 阅读数:829

最新swoole-cliswoolecli支持

前言

想必使用PHP作為開發語言的童鞋應該都聽說過swoole,大致都知道swoole是什麼.
Swoole 使 PHP 開發人員可以編寫高性能高並發的 TCP、UDP、Unix Socket、HTTP、 WebSocket 等服務,讓 PHP 不再局限於 Web 領域。Swoole4 協程的成熟將 PHP 帶入了前所未有的時期, 為性能的提昇提供了獨一無二的可能性。Swoole 可以廣泛應用於互聯網、移動通信、雲計算、 網絡遊戲、物聯網(IOT)、車聯網、智能家居等領域。使用 PHP + Swoole 可以使企業 IT 研發團隊的效率大大提昇,更加專注於開發創新產品。總的來說Swoole是PHP 協程框架,能够.swoole是由純 C 語言編寫,完美支持PHP語言。可使用Swoole搭建了一個异步服務器,提供异步響應,推送,定時任務等一系列工作。解决PHP語言本身在fpm的場景下每個請求都需要重新加載,對資源消耗過多的問題.
由於swoole僅支持 
Linux
(2.3.32 以上內核)、
FreeBSD
MacOS
 三種操作系統,以前對windows系統的支持不太好.想要在windows使用swoole,需要安裝linux虛擬機或者安裝docker,由於docker本身對windows系統的支持也不太友好,所以在windows上的體驗極其糟糕.不過我在GitHub上看到最新的swoole已經可以支持windows系統,對於windows服務器的用戶來說無疑是個好消息,下面就在windows系統體驗一下

安裝准備

環境:
  • windows7 64比特(注:僅支持64比特的系統)
  • cygwin64
  • 下載地址
https://github.com/swoole/swoole-src/releases

null
swoole-cli是免安裝的,可直接使用,無需安裝任何
php
相關的軟件包,直接下載
swoole-cli-cygwin64
的可執行程序
zip
壓縮包,然後解壓到任意一個目錄即可

配置環境變量

解壓之後就是配置環境變量
解壓之後目錄結構如下:
null
將解壓後的文件夾下的bin目錄路徑配置到系統的Path環境變量中。我的路徑是G:\swoole-cli-v4.8.11-cygwin64\bin,你需要按照你本機解壓後的具體比特置配置.
null
查看安裝的版本,驗證是否安裝成功
命令如下:
swoole-cli -v
null
查看swoole的配置
null
查看swoole中的php相關配置
下面查詢到的PHP擴展模塊是swoole自帶的.如果您希望增加擴展到swoole-cli,可以在swoole官方的github主頁提交issue
null
安裝完成之後體驗一下編輯簡單的Web服務器.

體驗開發簡單的web服務器

<?php

$http = new Swoole\Http\Server('127.0.0.1', 9991, SWOOLE_BASE);

$http->on('start', function ($server) {

 echo &quot;Swoole http server 已啟動, 可訪問 http://127.0.0.1:9501\n&quot;;
});

$http->on('request', function ($request, $response) {

 $response->header('Content-Type', 'text/plain');

 $response->end('你好,這是我的第一個swoole http web服務器!');

});
$http->start();
on綁定swoole中的動作事件.start是啟動一個http服務
運行我們寫好的服務器:
swoole-cli webserver.php
null
接著按照命令行提示複制鏈接到瀏覽器訪問:
null
接著來測試一下websocket,這也是我們平時做實時通訊常用的協議
服務端:ws.php
<?php
//創建WebSocket Server對象,監聽0.0.0.0:9502端口
$ws = new Swoole\WebSocket\Server('0.0.0.0', 9502);

//監聽WebSocket連接打開事件
$ws->on('Open', function ($ws, $request) {
 $ws->push($request->fd, &quot;你好\n&quot;.$request->fd);
});

//監聽WebSocket消息事件
$ws->on('Message', function ($ws, $frame) {
 echo &quot;消息: {$frame->data}\n&quot;;
 $ws->push($frame->fd, &quot;server: {$frame->data}&quot;);
});

//監聽WebSocket連接關閉事件
$ws->on('Close', function ($ws, $fd) {
 echo &quot;client-{$fd} 已關閉\n&quot;;
});

$ws->start();
客戶端:
<html>
 <head> 
 <title>測試Websocket</title> 
 <style> body { margin: 0; } canvas { width: 100%; height: 100% } </style> 
 </head> 
 <body> 
 <script>
var wsServer = 'ws://127.0.0.1:9502';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) {
console.log(&quot;Connected to WebSocket server.&quot;);
};

websocket.onclose = function (evt) {
console.log(&quot;已斷開連接&quot;);
};

websocket.onmessage = function (evt) {
console.log('接收的數據來自: ' + evt.data);
};

websocket.onerror = function (evt, e) {
console.log('錯誤信息: ' + evt.data);
};

</script> 
 </body>
</html>
打開cmd執行:swoole-cli ws.php,看到如下圖沒有任何提示說明已經執行成功
null
然後在瀏覽訪問:http://localhost/t3d/ws.html,這個是我的本地連接,需要根據你的實際情况訪問,避免錯誤,務必把使用服務器來運行你的客戶段代碼,我一共打開兩個訪問窗口,效果如下:
null

null

總結

swoole的安裝跟以前在windows上安裝相比,簡單了很多,基本無需任何安裝操作,下載即可使用,只需配置環境變量.裏面自帶了php8.1以上的版本,無需自己安裝,如果您需要添加擴展到swoole-cli,需要在GitHub上提交issue
版权声明:本文为[InfoQ]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/204/202207232159489584.html