成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

swoole學(xué)習(xí)手記(二)創(chuàng)建服務(wù)器(上)

cppowboy / 2515人閱讀

摘要:目錄初識(shí)創(chuàng)建服務(wù)器上創(chuàng)建服務(wù)器下異步任務(wù)持續(xù)更新中。。。啟動(dòng)后,客戶端無需,直接可以向監(jiān)聽的端口發(fā)送數(shù)據(jù)包。

目錄

初識(shí)Swoole

創(chuàng)建服務(wù)器(上)

創(chuàng)建服務(wù)器(下)

異步任務(wù)task

持續(xù)更新中。。。

1.創(chuàng)建tcp服務(wù)器

先照著文檔創(chuàng)建一個(gè)tcp服務(wù)器

set([
"worker_num"=>4,  //worker進(jìn)程數(shù) 一般為cpu數(shù)的 1-4倍
"max_request"=>10000, //worker進(jìn)程在處理完n次請求后結(jié)束運(yùn)行重建一個(gè)
]);
//這里
//當(dāng)然還有很多設(shè)置的參數(shù) 文檔傳送門:https://wiki.swoole.com/wiki/page/13.html

//監(jiān)聽連接進(jìn)入事件(這里是一個(gè)閉包寫法)連接后調(diào)用的函數(shù)
//$fd客戶端連接的唯一標(biāo)示
//$reactor_id 線程id 是一個(gè)自增數(shù)字,范圍是1 ~ 1600萬,fd超過1600萬后會(huì)自動(dòng)從1開始進(jìn)行復(fù)用
$serv->on("connect", function ($serv, $fd, $reactor_id) {
    echo "Client: {$reactor_id} - {$fd}-Connect.
";
});

//監(jiān)聽數(shù)據(jù)接收事件
//$data就是接收的數(shù)據(jù)
$serv->on("receive", function ($serv, $fd, $reactor_id, $data)) {
    $serv->send($fd, "Server: ".$data);
    echo "收到了數(shù)據(jù)".$data;
});

//監(jiān)聽連接關(guān)閉事件
$serv->on("close", function ($serv, $fd) {
    echo "Client: Close".$fd."
";
});

//啟動(dòng)服務(wù)器
$serv->start(); 

ok我們測試一下 php tcp.php 打開tcp服務(wù)器(如果端口被占用,則殺死占用端口的進(jìn)程,關(guān)掉使用ctrl+c,掛起使用ctrl+z)

再打開telnet(我們要再打開一個(gè)終端)測試一下是不是成功了,隨便輸入eqqeq

再看看tcp服務(wù)器

看到這里我們整理一下思路:
創(chuàng)建了tcp服務(wù)器->telnet連接服務(wù)器->tcp執(zhí)行connect->telnent發(fā)送信息->tcp監(jiān)聽到receive事件->telnent斷開->tcp 監(jiān)聽到close事件


疑問
1.server與telnet的關(guān)系
服務(wù)器與客服端的關(guān)系,一個(gè)server對(duì)應(yīng)多個(gè)telnet

2.$serv->send($fd, "Server: ".$data); 和 直接輸出 echo 有什么區(qū)別呀?

send是發(fā)送數(shù)據(jù) 給 對(duì)方(連接我服務(wù)器的) ,比如你用微信和你的朋友聊天,你發(fā)了一個(gè)server: ".$data,那么就相當(dāng)于你把消息發(fā)給了你朋友, 而echo的話是輸出內(nèi)容,只給自己。

3.線程與進(jìn)程是什么鬼?
相當(dāng)于一個(gè)工廠(CPU)里的多個(gè)車間(進(jìn)程)
一個(gè)車間(進(jìn)程)有很多個(gè)工人(線程)
車間里面有廁所(共享內(nèi)存),工人都可以共用,但是你得等工人用完才可以進(jìn)去

我們平時(shí)使用php是單進(jìn)程,那么大的工廠就用了一個(gè)車間效率當(dāng)然慢,
所以我們要多個(gè)車間(多進(jìn)程),多個(gè)員工(線程),來提高效率

注意:
每次修改服務(wù)器腳本文件后都要
關(guān)閉進(jìn)程再重新打開才會(huì)生效

2.創(chuàng)建udp服務(wù)器

1.TCP核ucp都是傳輸層協(xié)議,但是UDP服務(wù)器與TCP服務(wù)器不同,UDP沒有連接的概念,udp消耗資源比較小,但是速度快。啟動(dòng)Server后,客戶端無需Connect,直接可以向Server監(jiān)聽的9502端口發(fā)送數(shù)據(jù)包。

2.udp的創(chuàng)建方式跟tcp很像

//就是把最后一個(gè)參數(shù)改為 SWOOLE_SOCK_UDP 
$serv = new swoole_server("127.0.0.1", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP); 

3.UDP服務(wù)器可以使用不用telnet而是用 netcat -u 來連接測試
nc安裝:
yum -y install yum -y install nc.x86_64 使用就是直接 nc -u 127.0.0.1 9502

4.完整的實(shí)現(xiàn)

//創(chuàng)建Server對(duì)象,監(jiān)聽 127.0.0.1:9502端口,類型為SWOOLE_SOCK_UDP
$serv = new swoole_server("127.0.0.1", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);
 
//udp沒有 $serv->on connect的概念

//監(jiān)聽數(shù)據(jù)接收事件
$serv->on("Packet", function ($serv, $data, $clientInfo) {
    $serv->sendto($clientInfo["address"], $clientInfo["port"], "Server ".$data);
    var_dump($clientInfo);
});

//啟動(dòng)服務(wù)器
$serv->start(); 

5.測試,同樣我們也打開2個(gè)終端
udp服務(wù)器 這里我們打印了$clientInfo

nc測試服務(wù)器


ok測試沒有問題^-^

思考:tcp與udp都是傳輸層協(xié)議的server,那么基于傳輸層的應(yīng)用層server又會(huì)是怎樣的呢?

如果這篇文章對(duì)你有用,可以點(diǎn)個(gè)贊或者是收藏,算是對(duì)作者的鼓勵(lì)~

文檔地址傳送門:https://wiki.swoole.com/wiki/...
推薦singwa老師的視頻教程:https://coding.imooc.com/clas...

另附上小弟網(wǎng)站。。。www.entercode.cn 推廣一波...

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28649.html

相關(guān)文章

  • Swoole學(xué)習(xí)手記(一)初識(shí)Swoole

    摘要:目錄初識(shí)創(chuàng)建服務(wù)器上創(chuàng)建服務(wù)器下異步任務(wù)持續(xù)更新中。。。參加工作有一段時(shí)間了,偶爾會(huì)聽到,對(duì)我這種小白粗略看下文檔都會(huì)覺得很牛逼。個(gè)人理解就是解決這樣應(yīng)用場景的。 目錄 初識(shí)Swoole 創(chuàng)建服務(wù)器(上) 創(chuàng)建服務(wù)器(下) 異步任務(wù)task 持續(xù)更新中。。。 參加工作有一段時(shí)間了,偶爾會(huì)聽到swoole,對(duì)我這種PHP小白粗略看下文檔都會(huì)覺得很牛逼。由于學(xué)習(xí)成本比較高,自身對(duì)網(wǎng)絡(luò)異...

    yeyan1996 評(píng)論0 收藏0
  • swoole學(xué)習(xí)手記(三)創(chuàng)建務(wù)器(下)

    摘要:目錄初識(shí)創(chuàng)建服務(wù)器上創(chuàng)建服務(wù)器下異步任務(wù)持續(xù)更新中。。。而它的最大特點(diǎn)就是,服務(wù)器可以主動(dòng)向客戶端推送信息,客戶端也可以主動(dòng)向服務(wù)器發(fā)送信息,是真正的雙向平等對(duì)話,屬于服務(wù)器推送技術(shù)的一種。 目錄 初識(shí)Swoole 創(chuàng)建服務(wù)器(上) 創(chuàng)建服務(wù)器(下) 異步任務(wù)task 持續(xù)更新中。。。 1.創(chuàng)建HttpServer服務(wù)器 HttpServer是基于swoole_server,所以s...

    aikin 評(píng)論0 收藏0
  • swoole學(xué)習(xí)手記(四)異步任務(wù)task

    摘要:目錄初識(shí)創(chuàng)建服務(wù)器上創(chuàng)建服務(wù)器下異步任務(wù)持續(xù)更新中。。。什么是異步任務(wù)把當(dāng)前的任務(wù)異步投遞到進(jìn)程池中執(zhí)行,不影響接下來的事務(wù)。 目錄 初識(shí)Swoole 創(chuàng)建服務(wù)器(上) 創(chuàng)建服務(wù)器(下) 異步任務(wù)task 持續(xù)更新中。。。 什么是異步任務(wù)? 1.把當(dāng)前的任務(wù)異步投遞到TaskWorker進(jìn)程池中執(zhí)行,不影響接下來的事務(wù)。舉個(gè)栗子: showImg(https://segmentfa...

    vincent_xyb 評(píng)論0 收藏0
  • webpack入門學(xué)習(xí)手記

    摘要:例如現(xiàn)在的入門學(xué)習(xí)手記系列。收到粉絲留言和打賞的喜悅。安裝上一篇入門學(xué)習(xí)手記一,主要是介紹了的核心概念,是整個(gè)學(xué)習(xí)過程的基礎(chǔ)知識(shí)。新生成的類似如下入門學(xué)習(xí)手記因?yàn)樯傻膬?nèi)容過多,我直接省略掉了。 showImg(https://segmentfault.com/img/bVbk5Nd?w=1150&h=599); 本人微信公眾號(hào):前端修煉之路,歡迎關(guān)注。 最近開始想要維護(hù)一個(gè)個(gè)人的公眾...

    Joyven 評(píng)論0 收藏0
  • webpack入門學(xué)習(xí)手記(一)

    摘要:爭取早日能完全拋棄掉中文文檔,最終可以翻譯英文文檔,輸出英文文檔。待續(xù)相關(guān)文章入門學(xué)習(xí)手記一入門學(xué)習(xí)手記二入門學(xué)習(xí)手記三入門學(xué)習(xí)手記四 本人微信公眾號(hào):前端修煉之路,歡迎關(guān)注。 showImg(https://segmentfault.com/img/bVbk0kO?w=1150&h=599); 之前用過gulp、grunt,但是一直沒有學(xué)習(xí)過webpack。這兩天剛好有時(shí)間,學(xué)習(xí)了下...

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

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

0條評(píng)論

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