Swoole入門 - TCP 服務(wù)

說明:機(jī)器還是之前的機(jī)器,環(huán)境還是還是之前的環(huán)境换途。

手冊絕對是我們學(xué)習(xí)的第一手資料懊渡,也是最有價值的資料刽射,所以請不要丟掉它。

首先進(jìn)入之前進(jìn)入我的目錄

[zhengzongqiang@localhost server]$ pwd 
/opt/work/htdocs/swoole_mooc/demo/server

創(chuàng)建tcp服務(wù)端文件

[zhengzongqiang@localhost server]$ sudo vim tcp.php

打開文檔相關(guān)說明剃执,并認(rèn)真閱讀(我必須說明:開源的框架誓禁,掙點(diǎn)廣告費(fèi)我是支持的;我的觀點(diǎn)跟我的馬賽克并不沖突)

image

文檔還是好東西肾档,一定要借鑒(我有認(rèn)真閱讀的摹恰,并且為了方便自己看效果有小的改動)

[zhengzongqiang@localhost server]$ cat tcp.php 
<?php
//創(chuàng)建Server對象,監(jiān)聽 127.0.0.1:9501端口
$serv = new swoole_server("127.0.0.1", 9501); 

$serv->set([
        'worker_num' => 4, // worker 進(jìn)程數(shù)怒见,cpu的1-4倍
        'max_request'=> 10000
]);
// 命令行查看server開啟的worker數(shù)
// ps aft | grep swoole_tcp_server.php

//監(jiān)聽連接進(jìn)入事件
$serv->on('connect', function ($serv, $fd, $reactor_id) {  
    echo "Client: {$reactor_id} - {$fd} - Connect.\n";
});

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

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

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

于是以上代碼片段就被借鑒(ban)到了我們剛剛創(chuàng)建的tcp.php俗慈。

保存退出后,執(zhí)行此文件開啟tcp服務(wù)速种。

文檔同樣貼心的告訴我們?nèi)绾悟?yàn)證姜盈,在新的會話中使用telnet連接服務(wù):

[zhengzongqiang@localhost ~]$ telnet 127.0.0.1 9501

當(dāng)使用telnet工具連接之后,服務(wù)端便處罰connect事件配阵,并打印1號客戶已經(jīng)連接

[zhengzongqiang@localhost server]$ php tcp.php 
Client: 0 - 1 - Connect.

在客戶端發(fā)送消息hello馏颂,可以接收到server端的ack

[zhengzongqiang@localhost ~]$ telnet 127.0.0.1 9501
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
hello
Server: reactor_id:0  fd:1  data:hello

創(chuàng)建tcp客戶端文件 tcp.php

進(jìn)入客戶端目錄

[zhengzongqiang@localhost client]$ 
/opt/work/htdocs/swoole_mooc/demo/client

創(chuàng)建tcp.php文件

[zhengzongqiang@localhost client]$ sudo vim tcp.php

當(dāng)然,如你所想棋傍,文檔中有值得我們借鑒的東西(這次只是看了文檔救拉,但為了實(shí)現(xiàn)telnet的效果,這里使用php cli常量)

[zhengzongqiang@localhost client]$ cat tcp.php 
<?php
// 連接swoole tcp server
$client = new swoole_client(SWOOLE_SOCK_TCP);

if(!$client->connect("127.0.0.1",9501)){
        echo "連接失敗";
        exit;
}

// php cli常量:STDIN:cli輸入 STDOUT:cli輸出
fwrite(STDOUT,"請輸入消息");

// 接收用戶輸入
$msg = trim(fgets(STDIN));

// 發(fā)送消息給 tcp server,返回值為發(fā)送的信息長度
$send = $client->send($msg);
if($send){
        echo 'send'. $send."\n";
}

// 接受來自 server 的數(shù)據(jù)
$result = $client->recv();
echo 'recv:'. $result."\n";

這時需要打開兩個會話窗口瘫拣,一個執(zhí)行server端程序文件亿絮,一個執(zhí)行client端程序文件,執(zhí)行client端程序文件后麸拄,server顯示1號客戶端連接派昧。

// server
[zhengzongqiang@localhost server]$ php tcp.php 
Client: 0 - 1 - Connect.

在客戶端輸入hello,可接收到server端的回復(fù)

[zhengzongqiang@localhost client]$ php tcp.php 
請輸入消息hello
send5
recv:Server: reactor_id:0  fd:1  data:hello

[zhengzongqiang@localhost client]$ 

一個小技巧

查看server端設(shè)置的worker數(shù)量,通過以下命令可以看到拢切,我們設(shè)置的worker_num為4蒂萎。

[zhengzongqiang@localhost client]$ ps aft | grep tcp.php
  7353 pts/3    S+     0:00  \_ grep --color=auto tcp.php
  7281 pts/0    Sl+    0:00  \_ /opt/soft/php/bin/php tcp.php
  7282 pts/0    S+     0:00      \_ /opt/soft/php/bin/php tcp.php
  7284 pts/0    S+     0:00          \_ /opt/soft/php/bin/php tcp.php
  7285 pts/0    S+     0:00          \_ /opt/soft/php/bin/php tcp.php
  7286 pts/0    S+     0:00          \_ /opt/soft/php/bin/php tcp.php
  7287 pts/0    S+     0:00          \_ /opt/soft/php/bin/php tcp.php

通過以上學(xué)習(xí),tcp服務(wù)入門淮椰,會看文檔五慈,UDP也就會了。你會發(fā)現(xiàn)Swoole沒那么神秘主穗;通過后續(xù)學(xué)習(xí)你會發(fā)現(xiàn)泻拦,能夠準(zhǔn)確的形容Swoole的詞,應(yīng)該是‘酷’忽媒!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末争拐,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子晦雨,更是在濱河造成了極大的恐慌陆错,老刑警劉巖灯抛,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異音瓷,居然都是意外死亡对嚼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門绳慎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纵竖,“玉大人,你說我怎么就攤上這事杏愤∶移觯” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵珊楼,是天一觀的道長通殃。 經(jīng)常有香客問我,道長厕宗,這世上最難降的妖魔是什么画舌? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮已慢,結(jié)果婚禮上曲聂,老公的妹妹穿的比我還像新娘。我一直安慰自己佑惠,他們只是感情好朋腋,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布偶器。 她就那樣靜靜地躺著呢燥,像睡著了一般蒜危。 火紅的嫁衣襯著肌膚如雪炫刷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天恢氯,我揣著相機(jī)與錄音蚓峦,去河邊找鬼卵迂。 笑死察蹲,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的催训。 我是一名探鬼主播洽议,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼漫拭!你這毒婦竟也來了亚兄?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤采驻,失蹤者是張志新(化名)和其女友劉穎审胚,沒想到半個月后匈勋,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡膳叨,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年洽洁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片菲嘴。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡饿自,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出龄坪,到底是詐尸還是另有隱情昭雌,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布健田,位于F島的核電站烛卧,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏妓局。R本人自食惡果不足惜总放,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望跟磨。 院中可真熱鬧间聊,春花似錦、人聲如沸抵拘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽僵蛛。三九已至尚蝌,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間充尉,已是汗流浹背飘言。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留驼侠,地道東北人姿鸿。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像倒源,于是被迫代替她去往敵國和親苛预。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 前言 上一回講到笋熬,Swoole終于成功邂逅了PHP热某,現(xiàn)在要開始它們的奇妙路程了。 Server之初 通常,我們會把...
    零一間閱讀 2,863評論 0 12
  • 參考資料 官方網(wǎng)站 https://www.swoole.com/page/download PHP沒有像Pyth...
    JunChow520閱讀 2,939評論 0 6
  • date: 2017-12-14 21:34:51title: swoole 在 swoft 中的應(yīng)用 swoft...
    daydaygo閱讀 4,212評論 9 12
  • 前文再續(xù)昔馋,就書接上一回筹吐,隨著與Server、TCP秘遏、Protocol的邂逅丘薛,Swoole終于迎來了自己的故事,今天...
    蝸牛淋雨閱讀 1,709評論 1 14
  • 十月雨滴垄提, 寒夜淅瀝榔袋, 滌不掉你容顏秀麗; 晚秋故地铡俐, 涼風(fēng)四起凰兑, 吹不去你身姿旖旎。 畫船外的一點(diǎn)寒意审丘, 早已浸...
    青柘閱讀 177評論 0 0