真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

php只能做網(wǎng)站?基于swoole+websocket開發(fā)雙

前言

眾所周知,PHP用于開發(fā)基于HTTP協(xié)議的網(wǎng)站應(yīng)用非常便捷。而HTTP協(xié)議是一種單向的通信協(xié)議,只能接收客戶端的請求,然后響應(yīng)請求,不能主動向客戶端推送信息。因此,一些實時性要求比較高的應(yīng)用,如實時聊天、直播應(yīng)用、在線網(wǎng)頁游戲等,就不適合采用HTTP協(xié)議。即使采用客戶端主動輪詢的方式來間接實現(xiàn)雙向通信,也會較大地增加服務(wù)器的負擔(dān),增大代碼的復(fù)雜性,不利于維護。

創(chuàng)新互聯(lián)建站專注于賀州網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供賀州營銷型網(wǎng)站建設(shè),賀州網(wǎng)站制作、賀州網(wǎng)頁設(shè)計、賀州網(wǎng)站官網(wǎng)定制、微信小程序定制開發(fā)服務(wù),打造賀州網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供賀州網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

那么,是否PHP就無法用來開發(fā)雙向通信的應(yīng)用呢?

答案是否定的。PHP內(nèi)置socket通信支持,可以與linux程序基于socket進行雙向通信。php swoole框架封裝了一個websocket服務(wù)端,基于此可以很方便地建立一個與html5的websocket客戶端進行通信的服務(wù)。

一、 Swoole介紹

Swoole是一個面向生產(chǎn)環(huán)境的 PHP 異步網(wǎng)絡(luò)通信引擎,使 PHP 開發(fā)人員可以編寫高性能的異步并發(fā) TCP、UDP、Unix Socket、HTTP,WebSocket 服務(wù)。Swoole 可以廣泛應(yīng)用于互聯(lián)網(wǎng)、移動通信、企業(yè)軟件、云計算、網(wǎng)絡(luò)游戲、物聯(lián)網(wǎng)(IOT)、車聯(lián)網(wǎng)、智能家居等領(lǐng)域。 使用 PHP + Swoole 作為網(wǎng)絡(luò)通信框架,可以使企業(yè) IT 研發(fā)團隊的效率大大提升。

swoole支持用于搭建多種server,包括http server、websocket server、tcp server、redis server等等。這里我們使用到的是其中的websocket server。

二、WebSocket介紹

WebSocket是一種在單個TCP連接上進行全雙工通信的協(xié)議。WebSocket通信協(xié)議于2011年被IETF定為標(biāo)準(zhǔn)RFC 6455,并由RFC7936補充規(guī)范。WebSocket API也被W3C定為標(biāo)準(zhǔn)。
WebSocket使得客戶端和服務(wù)器之間的數(shù)據(jù)交換變得更加簡單,允許服務(wù)端主動向客戶端推送數(shù)據(jù)。在WebSocket API中,瀏覽器和服務(wù)器只需要完成一次握手,兩者之間就直接可以創(chuàng)建持久性的連接,并進行雙向數(shù)據(jù)傳輸。

簡單地來說,websocket協(xié)議實現(xiàn)了瀏覽器和服務(wù)器之間的雙向通信。而html5原生支持websocket協(xié)議。

三、swoole websocket 服務(wù)端demo

1.安裝swoole

swoole以php擴展的形式進行加載,首先需要為你的php安裝swoole擴展,安裝命令如下:

pecl install swoole

安裝成功后在php.ini文件加上extension=swoole.so加載擴展

2.啟動服務(wù)端

新建一個php文件,文件名為server.php,文件內(nèi)容如下:

$server = new Swoole\WebSocket\Server("0.0.0.0", 9501);
$server->on('open', function (Swoole\WebSocket\Server $server, $request) {
        echo "server: handshake success with fd{$request->fd}\n";
    });
$server->on('message', function (Swoole\WebSocket\Server $server, $frame) {
        echo "receive from {$frame->fd}:{$frame->data}\n";
        $server->push($frame->fd, "this is server");
    });
$server->on('close', function ($ser, $fd) {
        echo "client {$fd} closed\n";
    });
$server->on('request', function (Swoole\Http\Request $request, Swoole\Http\Response $response) {
    global $server;//調(diào)用外部的server
    // $server->connections 遍歷所有websocket連接用戶的fd,給所有用戶推送
    foreach ($server->connections as $fd) {
        // 需要先判斷是否是正確的websocket連接,否則有可能會push失敗
        if ($server->isEstablished($fd)) {
            $server->push($fd, $request->get['message']);
        }
    }
});
$server->start();

此服務(wù)監(jiān)聽本機的9501端口,運行命令 php server.php 啟動服務(wù)。

四、HTML5 WebSocket 客戶端demo

1.客戶端代碼

新建一個testServer.html文件,寫入以下內(nèi)容:




   測試WebSocket



    


將【服務(wù)端IP】替換成swoole服務(wù)端ip,保存文件。

五、測試demo

(1) 訪問步驟四的客戶端demo頁面,首先與服務(wù)端建立連接,查看瀏覽器console log,可以看到顯示:

connected!

(2) 查看linux控制臺,可以看到顯示:

server: handshake success with fd1

(3) 接著客戶端向服務(wù)端發(fā)了一條消息,服務(wù)端控制臺顯示:

receive from fd1:hello server,this is client!

(4) 服務(wù)端收到消息后,向客戶端回復(fù)了一條消息,客戶端控制臺顯示:

server message:this is server

以上就是基于swoole+websocket開發(fā)雙向通信應(yīng)用的簡單演示,在線聊天、網(wǎng)頁游戲等實時通信的應(yīng)用也可基于此方式進行開發(fā)。php開發(fā)效率高,可以更快、更高效地進行此類應(yīng)用地開發(fā),節(jié)約開發(fā)成本。

大家如果還有什么疑問,可以關(guān)注公眾號“全棧社區(qū)”進行提問。


  • 關(guān)注微信公眾號“全棧社區(qū)”,可獲取更多站長、開發(fā)者必備的前端、后端、服務(wù)器技術(shù)干貨。

  • 旭貓云19元vps:美國vps
  • 旭貓云免備案空間:香港云主機

標(biāo)題名稱:php只能做網(wǎng)站?基于swoole+websocket開發(fā)雙
文章分享:http://weahome.cn/article/jiijoc.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部