摘要:目錄初識(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ì)生效
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
摘要:目錄初識(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ò)異...
摘要:目錄初識(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...
摘要:目錄初識(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...
摘要:例如現(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è)人的公眾...
摘要:爭取早日能完全拋棄掉中文文檔,最終可以翻譯英文文檔,輸出英文文檔。待續(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í)了下...
閱讀 1802·2021-11-18 13:20
閱讀 1182·2021-10-11 10:59
閱讀 3019·2021-08-24 10:01
閱讀 3527·2019-08-29 14:21
閱讀 3400·2019-08-29 14:15
閱讀 3545·2019-08-26 12:23
閱讀 3367·2019-08-26 11:46
閱讀 3377·2019-08-26 11:35