第二章: TCP服務器端/客戶端的開發

推薦 swoole ide:https://github.com/eaglewu/swoole-ide-helper 下載放在項目目錄php

Swoole 在IDE下自動識別類、函數、宏,自動補全函數名git

Swoole 結構,便於開發過程當中查看文檔,以及屏蔽IDE undefined 提示,便於快速查看函數用法。github

Swoole releases 版本下載地址:https://github.com/swoole/swoole-src/releases編程

API 手冊在線預覽:Swoole API Manualapi

開發Swoole項目同時,在IDE中打開/導入本文件便可。服務器

使用 IDE自帶 Include Path 功能引入 helper 目錄swoole

PHPstorm使用演示(其餘IDE同理):網絡

我的特別喜歡 swoole 編程,感受好強大異步

 

不說了直接上代碼試試效果:tcp

TCP服務器端

server.php

<?php
    /**
     * User: wangjie404
     * Date: 2016/7/26
     * Time: 14:19
     * TCP Server
     */
    //0.0.0.0表示監聽全部地址,9501表示端口

    $server = new swoole_server('0.0.0.0',9501);
    //開始事件函數回調的設定 ,創建鏈接
    $server->on("connect",function(swoole_server $ser,$fd,$from_id){
       echo  "Connected";
       $ser->send($fd,"hello\n");
    });
    // 接收數據 $data 發來的數據
    $server->on("receive",function(swoole_server $ser,$fd,$from_id,$data){
         //接收客戶端數據
        echo "received:".$data;
        /**
         *發送數據到客戶端
         *發送的數據。TCP協議最大不得超過2M,UDP協議不得超過64K
         *發送成功會返回true,若是鏈接已被關閉或發送失敗會返回false
        */
      //  $ser->send($fd,'Server:hello');
$ser->send($fd,'Server:吃了\n');
    });
    // 關閉連接
    $server->on("close",function($ser,$fd,$from_id){
        echo  "close";
    });
    $server->start();

?>

進入你的文件所在目錄 運行 php server.php

打開一個新的窗口  輸入 telnet 你的ip 端口  輸入內容 查看 服務器響應的消息

備註:一個server 是能夠接受多個連接 的具體本身操做了。

 

2.本機迴環(127.0.0.1),局域網通訊,外網通訊3種方式的差別

本機迴環127.0.0.1 內存 等於進程間的通訊 延遲微妙級別
局域網 192.168.11.1 網卡-交換機 千兆 or 萬兆網絡 0.2-1ms左右
外網  14.18.203.64 網卡-路由器-英特網 非公網IP不可用 10-100ms

3.數據包從操做系統到網卡、交換機、路由器、互聯網,再到客戶端的網絡環境,到用戶主機操做系統,最後到客戶端程序

下面 來介紹一下 TCP/IP協議4層

1.鏈路層:交換機從主機到網線到交換機到路由器

2.網絡層:從網關到外面  ,各個路由器之間的轉發

3.傳輸層: 主要有tcp/udp udp爲比較原始的傳輸方式

4.應用層:協議  就是咱們的http ,smtp 等

 

4.路由協議 :

路由器之間交換信息,BGP

網關就是出口路由器 如 192.168.1.1

網絡段,主機段 192.168.1.100

掩碼:255.255.255.0

廣播 :192.168.1.255

DNS:應用層概念用於將域名解析爲ip,UDP

 

########################################################

下面 介紹 tcp_client 就不用經過  telnet 方式鏈接了

直接上代碼:

<?php
/**
 * User: Administrator
 * Date: 2016/7/26
 * Time: 15:55
 */
//經過tcp 方式,異步

$client = new swoole_client(SWOOLE_SOCK_TCP,SWOOLE_SOCK_ASYNC);

//@param $event_name
//@param $callback_function
//打開鏈接
$client->on("connect",function($cli){
echo "client connected.\n";
});
//關閉連接
$client->on("close",function($cli){
    echo "client close.\n";
});
//錯誤信息(必須 否則會報錯)
$client->on("error",function($cli){
    echo "error.\n";
});

//接收服務器信息
$client->on("receive",function($cli,$data){
    echo "received:$data\n";
  // 每隔3秒向服務器發送消息
    sleep(3);
    $cli->send('吃飯了麼?');
});
//下面是我虛擬機的IP 
$client->connect('192.168.11.91',9501);

運行php server.php

運行php client.php

哈哈!有啥問題 能夠回覆解決額;你們能夠一塊兒交流討論;

相關文章
相關標籤/搜索