摘要:目錄初識創建服務器上創建服務器下異步任務持續更新中。。。啟動后,客戶端無需,直接可以向監聽的端口發送數據包。
目錄
初識Swoole
創建服務器(上)
創建服務器(下)
異步任務task
持續更新中。。。
1.創建tcp服務器先照著文檔創建一個tcp服務器
set([ "worker_num"=>4, //worker進程數 一般為cpu數的 1-4倍 "max_request"=>10000, //worker進程在處理完n次請求后結束運行重建一個 ]); //這里 //當然還有很多設置的參數 文檔傳送門:https://wiki.swoole.com/wiki/page/13.html //監聽連接進入事件(這里是一個閉包寫法)連接后調用的函數 //$fd客戶端連接的唯一標示 //$reactor_id 線程id 是一個自增數字,范圍是1 ~ 1600萬,fd超過1600萬后會自動從1開始進行復用 $serv->on("connect", function ($serv, $fd, $reactor_id) { echo "Client: {$reactor_id} - {$fd}-Connect. "; }); //監聽數據接收事件 //$data就是接收的數據 $serv->on("receive", function ($serv, $fd, $reactor_id, $data)) { $serv->send($fd, "Server: ".$data); echo "收到了數據".$data; }); //監聽連接關閉事件 $serv->on("close", function ($serv, $fd) { echo "Client: Close".$fd." "; }); //啟動服務器 $serv->start();
ok我們測試一下 php tcp.php 打開tcp服務器(如果端口被占用,則殺死占用端口的進程,關掉使用ctrl+c,掛起使用ctrl+z)
再打開telnet(我們要再打開一個終端)測試一下是不是成功了,隨便輸入eqqeq
再看看tcp服務器
看到這里我們整理一下思路:
創建了tcp服務器->telnet連接服務器->tcp執行connect->telnent發送信息->tcp監聽到receive事件->telnent斷開->tcp 監聽到close事件
疑問
1.server與telnet的關系
服務器與客服端的關系,一個server對應多個telnet
2.$serv->send($fd, "Server: ".$data); 和 直接輸出 echo 有什么區別呀?
send是發送數據 給 對方(連接我服務器的) ,比如你用微信和你的朋友聊天,你發了一個server: ".$data,那么就相當于你把消息發給了你朋友, 而echo的話是輸出內容,只給自己。
3.線程與進程是什么鬼?
相當于一個工廠(CPU)里的多個車間(進程)
一個車間(進程)有很多個工人(線程)
車間里面有廁所(共享內存),工人都可以共用,但是你得等工人用完才可以進去
我們平時使用php是單進程,那么大的工廠就用了一個車間效率當然慢,
所以我們要多個車間(多進程),多個員工(線程),來提高效率
注意:
每次修改服務器腳本文件后都要
關閉進程再重新打開才會生效
1.TCP核ucp都是傳輸層協議,但是UDP服務器與TCP服務器不同,UDP沒有連接的概念,udp消耗資源比較小,但是速度快。啟動Server后,客戶端無需Connect,直接可以向Server監聽的9502端口發送數據包。
2.udp的創建方式跟tcp很像
//就是把最后一個參數改為 SWOOLE_SOCK_UDP $serv = new swoole_server("127.0.0.1", 9502, SWOOLE_PROCESS, SWOOLE_SOCK_UDP);
3.UDP服務器可以使用不用telnet而是用 netcat -u 來連接測試
nc安裝:
yum -y install yum -y install nc.x86_64 使用就是直接 nc -u 127.0.0.1 9502
4.完整的實現
//創建Server對象,監聽 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的概念 //監聽數據接收事件 $serv->on("Packet", function ($serv, $data, $clientInfo) { $serv->sendto($clientInfo["address"], $clientInfo["port"], "Server ".$data); var_dump($clientInfo); }); //啟動服務器 $serv->start();
5.測試,同樣我們也打開2個終端
udp服務器 這里我們打印了$clientInfo
nc測試服務器
ok測試沒有問題^-^
思考:tcp與udp都是傳輸層協議的server,那么基于傳輸層的應用層server又會是怎樣的呢?
如果這篇文章對你有用,可以點個贊或者是收藏,算是對作者的鼓勵~
文檔地址傳送門:https://wiki.swoole.com/wiki/...
推薦singwa老師的視頻教程:https://coding.imooc.com/clas...
另附上小弟網站。。。www.entercode.cn 推廣一波...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28649.html
摘要:目錄初識創建服務器上創建服務器下異步任務持續更新中。。。參加工作有一段時間了,偶爾會聽到,對我這種小白粗略看下文檔都會覺得很牛逼。個人理解就是解決這樣應用場景的。 目錄 初識Swoole 創建服務器(上) 創建服務器(下) 異步任務task 持續更新中。。。 參加工作有一段時間了,偶爾會聽到swoole,對我這種PHP小白粗略看下文檔都會覺得很牛逼。由于學習成本比較高,自身對網絡異...
摘要:目錄初識創建服務器上創建服務器下異步任務持續更新中。。。而它的最大特點就是,服務器可以主動向客戶端推送信息,客戶端也可以主動向服務器發送信息,是真正的雙向平等對話,屬于服務器推送技術的一種。 目錄 初識Swoole 創建服務器(上) 創建服務器(下) 異步任務task 持續更新中。。。 1.創建HttpServer服務器 HttpServer是基于swoole_server,所以s...
摘要:目錄初識創建服務器上創建服務器下異步任務持續更新中。。。什么是異步任務把當前的任務異步投遞到進程池中執行,不影響接下來的事務。 目錄 初識Swoole 創建服務器(上) 創建服務器(下) 異步任務task 持續更新中。。。 什么是異步任務? 1.把當前的任務異步投遞到TaskWorker進程池中執行,不影響接下來的事務。舉個栗子: showImg(https://segmentfa...
摘要:例如現在的入門學習手記系列。收到粉絲留言和打賞的喜悅。安裝上一篇入門學習手記一,主要是介紹了的核心概念,是整個學習過程的基礎知識。新生成的類似如下入門學習手記因為生成的內容過多,我直接省略掉了。 showImg(https://segmentfault.com/img/bVbk5Nd?w=1150&h=599); 本人微信公眾號:前端修煉之路,歡迎關注。 最近開始想要維護一個個人的公眾...
摘要:爭取早日能完全拋棄掉中文文檔,最終可以翻譯英文文檔,輸出英文文檔。待續相關文章入門學習手記一入門學習手記二入門學習手記三入門學習手記四 本人微信公眾號:前端修煉之路,歡迎關注。 showImg(https://segmentfault.com/img/bVbk0kO?w=1150&h=599); 之前用過gulp、grunt,但是一直沒有學習過webpack。這兩天剛好有時間,學習了下...
閱讀 1755·2021-11-18 13:20
閱讀 1140·2021-10-11 10:59
閱讀 2986·2021-08-24 10:01
閱讀 3499·2019-08-29 14:21
閱讀 3351·2019-08-29 14:15
閱讀 3512·2019-08-26 12:23
閱讀 3342·2019-08-26 11:46
閱讀 3344·2019-08-26 11:35