php搭建swooleTCP服務器

此次的swoole學習,比較緩慢php

也因爲這些幾天事比較多,晚上沒去學習,swoole的筆記也一直在沒編寫,下面簡單介紹和應用下swoolehtml

swoole是什麼?web

  • 異步、並行、高性能
  • 純C編寫
  • php擴展

swoole能作什麼?數據庫

  • 異步多線程服務器及客戶端
  • 異步MySQL、Reids、數據庫鏈接池、任務隊列
  • http/websocket服務器/客戶端
  • 異步文件讀寫
  • Swoole2.0支持協程

Swolle 實踐ubuntu

swoole手冊:https://wiki.swoole.com/wiki/page/1.htmlcentos

服務器版本:centos7/ubuntu16瀏覽器

php版本:5.4+服務器

1、swoole安裝(百度上有不少安裝文章,也能夠用寶塔直接安裝)websocket

2、簡單TCP服務器建立swoole

<?php
/**@建立TCP服務器 * 做者:生生 */ $host = '127.0.0.1'; //監聽對應外網的IP 0.0.0.0監聽全部ip $port = 9501;   //端口號(1024如下端口須要root權限) $mode = SWOOLE_PROCESS; //SWOOLE_PROCESS 進程模式-多進程方式 $socke_type = SWOOLE_SOCK_TCP; //SWOOLE_SOCK_TCP 服務器類型-默認TCP $serv = new swoole_server($host,$port); //後面2參數不寫是默認 /**@ * 函數:bool $swoole_server->on(string $event,miexd $callback); * $event * connect:當創建連接的時候 (2個默認參數:$serv-服務器信息,$fd-客戶信息 /-名字隨意) * receive:當接收數據的時候 (4個默認參數:$serv-同上,$fd-同上,$from_id-客戶id,$data-傳遞數據) * close:關閉連接 */ //@做用:監聽連接進入事件 $serv->on('connect',function($serv,$fd){ echo '連接成功'; }); //@做用:監聽數據接收事件 $serv->on('receive',function($serv,$fd,$from_id,$data){
    var_dump($fd.'--'.$data);
/**@ * 函數:bool Server->send(mixed $fd, string $data, int $serverSocket = -1); * 做用:向客戶端發送數據 * 參數: * $fd,客戶端的文件描述符 * $data,發送的數據,TCP協議最大不得超過2M,可修改 buffer_output_size 改變容許發送的最大包長度 * $serverSocket,向Unix Socket DGRAM對端發送數據時須要此項參數,TCP客戶端不須要填寫 */ $serv->send($fd,"數據:".$data); }); //@做用:監聽連接關閉事件 $serv->on('close',function($ser,$fd){ echo '關閉連接'; }); //啓動服務 $serv->start();

3、運行上面php文件

  一、瀏覽器直接訪問會提示:Fatal error: Swoole\Server::__construct(): swoole_server only can be used in PHP CLI mode. in /www/jzj/public/aa.php on line 7

     這個文件須要用php CLI模式(php命令行模式運行: php -f 運行文件名.php)

   

       二、若是命令行運行的時候出現這個錯誤說明,端口被佔用,

     

    查看被佔用的端口PID:sudo lsof -i:9501

    kill掉進程:sudo kill -9 PID(在運行 php -f 運行文件名.php

      

 4、建立TCP同步客戶端(TP5舉例)

<?php
namespace app\admin\controller;
use think\Controller;
use think\Db;
use Redis;
use swoole_client;
class Index extends controller
{
//客戶端swoole public function swoole() { $client = new swoole_client(SWOOLE_SOCK_TCP); //鏈接到服務器 if (!$client->connect('127.0.0.1', 9501, 0.5)) { die("connect failed."); } //向服務器發送數據 if (!$client->send("hello world")) { echo '發送失敗'; } //從服務器接收數據 $data = $client->recv(); if (!$data) { die("recv failed."); } echo $data; //關閉鏈接 $client->close(); } }

  注意客戶端服務器在框架中要引入

  

  把這個文件上傳到服務器項目中,瀏覽器訪問這個後若是報錯以下:是由於服務端沒有send發送數據出來問題

 

   服務端會出現send爲空,要注意極可能是$serv->on中的第一個參數不對,

  

   如圖:這個參數必定要是對應的new的對象

  

  在從新運行文件:命令行會出現這個,

  

  

  這樣就完成了簡單的tcp服務器與同步tcp客戶端的搭建,當tcp服務器文件運行完成後刪除也不影響(建議保留)

  簡單流程是:編寫TCP服務器文件->運行服務器文件->TCP服務器建立成功->建立TCP客戶端文件->運行與服務端(向服務端發送數據並接受服務端返回信息)

  固然這篇只是簡單的搭建與瞭解swoole,後續還會更新簡單的swoole的php異步操做與實時聊天功能

  本人也是新手,swoole是很強大的擴展,裏面包含不少知識我也在學習中

  想要探討swoole或者其餘問題能夠關注博客園:傳說中的生生或+Q:876036823一塊兒交流

                              -----生生的筆記

相關文章
相關標籤/搜索