国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

php只能做網(wǎng)站?基于swoole+websocket開發(fā)雙向通信應(yīng)用

琛h。 / 2751人閱讀

摘要:那么,是否就無法用來開發(fā)雙向通信的應(yīng)用呢答案是否定的。內(nèi)置通信支持,可以與程序基于進(jìn)行雙向通信。通信協(xié)議于年被定為標(biāo)準(zhǔn),并由補(bǔ)充規(guī)范。

前言

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

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

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

一、 Swoole介紹

Swoole是一個(gè)面向生產(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)、移動(dòng)通信、企業(yè)軟件、云計(jì)算、網(wǎng)絡(luò)游戲、物聯(lián)網(wǎng)(IOT)、車聯(lián)網(wǎng)、智能家居等領(lǐng)域。 使用 PHP + Swoole 作為網(wǎng)絡(luò)通信框架,可以使企業(yè) IT 研發(fā)團(tuán)隊(duì)的效率大大提升。

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

二、WebSocket介紹

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

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

三、swoole websocket 服務(wù)端demo
1.安裝swoole

swoole以php擴(kuò)展的形式進(jìn)行加載,首先需要為你的php安裝swoole擴(kuò)展,安裝命令如下:

pecl install swoole

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

2.啟動(dòng)服務(wù)端

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

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

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

四、HTML5 WebSocket 客戶端demo
1.客戶端代碼

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




   測試WebSocket



    



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

五、測試demo

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

connected!

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

server: handshake success with fd1

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

receive from fd1:hello server,this is client!

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

server message:this is server

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

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


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

旭貓?jiān)?9元VPS:美國VPS

旭貓?jiān)泼鈧浒缚臻g:香港云主機(jī)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/6815.html

相關(guān)文章

  • php只能網(wǎng)站基于swoole+websocket開發(fā)雙向通信應(yīng)用

    摘要:那么,是否就無法用來開發(fā)雙向通信的應(yīng)用呢答案是否定的。內(nèi)置通信支持,可以與程序基于進(jìn)行雙向通信。通信協(xié)議于年被定為標(biāo)準(zhǔn),并由補(bǔ)充規(guī)范。前言 眾所周知,PHP用于開發(fā)基于HTTP協(xié)議的網(wǎng)站應(yīng)用非常便捷。而HTTP協(xié)議是一種單向的通信協(xié)議,只能接收客戶端的請(qǐng)求,然后響應(yīng)請(qǐng)求,不能主動(dòng)向客戶端推送信息。因此,一些實(shí)時(shí)性要求比較高的應(yīng)用,如實(shí)時(shí)聊天、直播應(yīng)用、在線網(wǎng)頁游戲等,就不適合采用HTTP協(xié)議...

    番茄西紅柿 評(píng)論0 收藏0
  • Websocket解析及實(shí)現(xiàn)

    摘要:早期的輪詢是通過不斷自動(dòng)刷新頁面而實(shí)現(xiàn)的。長輪詢的另一個(gè)問題是缺乏標(biāo)準(zhǔn)實(shí)現(xiàn)。服務(wù)器端接到這個(gè)請(qǐng)求后作出回應(yīng)并不斷更新連接狀態(tài)以保證客戶端和服務(wù)器端的連接不過期。協(xié)議解析協(xié)議包含兩部分一部分是握手,一部分是數(shù)據(jù)傳輸。 Websocket是什么? Websocket是一個(gè)因?yàn)閼?yīng)用場景越來越復(fù)雜而提出的,針對(duì)瀏覽器和web服務(wù)器之間雙向持續(xù)通信而設(shè)計(jì),而且優(yōu)雅地兼容HTTP的協(xié)議(我猜想:同...

    XboxYan 評(píng)論0 收藏0
  • 2017年PHP程序員未來路在何方

    摘要:目前來看等語言還難以企及和。作為一個(gè)資深的開發(fā)者,在技術(shù)上給各位程序十點(diǎn)未來的建議,希望對(duì)大家有所幫助。開發(fā)者應(yīng)當(dāng)學(xué)習(xí)掌握規(guī)范,在開發(fā)程序時(shí)應(yīng)當(dāng)盡量遵循規(guī)范。程序員除了寫后臺(tái)程序之外,還有很大一部分工作在展現(xiàn)層,和瀏覽器前端打交道。 PHP 從誕生到現(xiàn)在已經(jīng)有20多年歷史,從Web時(shí)代興起到移動(dòng)互聯(lián)網(wǎng)退潮,互聯(lián)網(wǎng)領(lǐng)域各種編程語言和技術(shù)層出不窮, Node.js 、 GO 、 Pytho...

    william 評(píng)論0 收藏0
  • 【天贏金創(chuàng)】PHP7與Swoole

    摘要:但在密集計(jì)算方面比等靜態(tài)編譯語言差幾十倍甚至上百倍。一使用棧內(nèi)存在引擎和擴(kuò)展中,經(jīng)常要?jiǎng)?chuàng)建一個(gè)的變量,底層就是一個(gè)指針。代碼中創(chuàng)建的變量也進(jìn)行了優(yōu)化,直接在棧內(nèi)存上預(yù)分配。應(yīng)用層與底層在錯(cuò)誤拋出的方式全部統(tǒng)一為異常。 原文:http://rango.swoole.com/archives/440最近PHP官方終于發(fā)布了傳說中的PHP7,雖然只是alpha版。PHP7號(hào)稱是新一代的PHP...

    MingjunYang 評(píng)論0 收藏0
  • websocket歷史及使用詳解

    摘要:握手客戶端向服務(wù)端發(fā)起連接請(qǐng)求如圖,我們?cè)谡?qǐng)求服務(wù)器的時(shí)候,發(fā)送了這樣的。如圖下面解釋下字段的含義協(xié)議升級(jí)成功服務(wù)端處理之后的協(xié)議版本號(hào)協(xié)議升級(jí)為至此,握手成功下面就盡情的傳輸數(shù)據(jù)吧數(shù)據(jù)傳輸數(shù)據(jù)傳輸需要客戶端,沒什么好說的了。 一、閱前熱身 什么是keep-alive 1、keep-alive只是客戶端的一種建議 我們打開百度首頁,進(jìn)一步查看header。 showImg(https:...

    duan199226 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<