swoole客戶端無法連接怎么辦

swoole客戶端無法連接怎么辦

swoole客戶端無法連接怎么辦?

4種客戶端連接服務器的方式介紹

四種客戶端連接方式:瀏覽器連接

server.php: <?php //創建Server對象,監聽 10.211.55.15:9501端口 $serv = new swoole_server("10.211.55.15", 9501); // 10.211.55.15 是我們Swoole服務器地址 //監聽數據接收事件 $serv->on('receive',?function?($serv,?$fd,?$from_id,?$data)?{ ????echo?$data;?//打印?接收到的數據 ????$serv-&gt;send($fd,?"I?am?swoole");?//發送字符串給客戶端 ????$serv-&gt;close($fd);?//?注意:官方并不建議在這里關閉掉 }); //啟動服務器 $serv-&gt;start();

仔細看上面代碼,創建服務之后,我們監聽了數據接收事件,打印接收到的數據,然后輸出一個I am swoole字符串。

同樣的執行server.php,終端命令行會“等待狀態”:

php?server.php

然后我們使用火狐瀏覽器作為客戶端,請求Swoole服務器:http://10.211.55.15:9501/

此時(服務器)終端下會輸出類似如下:

GET?/favicon.ico?HTTP/1.1 Host:?10.211.55.15:9501 User-Agent:?Mozilla/5.0?(Macintosh;?Intel?Mac?OS?X?10.13;?rv:57.0)?Gecko/20100101?Firefox/57.0 Accept:?*/* Accept-Language:?zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding:?gzip,?deflate Connection:?keep-alive

這正是一段HTTP協議內容。

為什么可以通過瀏覽器訪問?

瀏覽器可以理解為一個socket客戶端,通過HTTP協議的交互完成傳輸過程。

HTTP協議(應用層)是建立在TCP協議(傳輸層)基礎之上,瀏覽器發出一次請求,會按照HTTP協議的規定發送“字符串”,請求完成后則端口連接。

上面我們通過瀏覽器的方式來訪問Swoole服務器,可能部分瀏覽器不行,因我們只是簡單的輸出一個字符串,并沒有按照HTTP協議來完成。

四種客戶端連接方式:telnet

首先要稍微修改一下我們服務端代碼(server.php),注釋掉下面這行:

$serv-&gt;close($fd);?//?注意:官方并不建議在這里關閉掉

如果沒有安裝telnet,使用如下命令安裝:

yum?install?telnet?-y

操作方法:

telnet?10.211.55.15?9501 #連接后,敲擊鍵盤`ctrl+]`鍵,就可以發送消息了, #比如我們輸入 hello #會緊接著一行顯示 I?am?swoole

四種客戶端連接方式:自己寫socket

首先要確定是否安裝了socket擴展。

使用原生的php代碼編寫一個客戶端client.php:

$socket?=?socket_create(AF_INET,SOCK_STREAM,SOL_TCP); socket_connect($socket,"10.211.55.15",?9501); socket_write($socket,"hello?swoole"); //?讀 $out?=?socket_read($socket,1024); echo?$out; socket_close($socket);

四種客戶端連接方式:Swoole官方提供的客戶端

https://wiki.swoole.com/wiki/page/p-client.html

<?php $client = new swoole_client(SWOOLE_SOCK_TCP); if (!$client->connect("10.211.55.15",?9501,?-1)) { ????exit("connect?failed.?Error:?{$client-&gt;errCode}n"); } $client-&gt;send("hello?worldn"); echo?$client-&gt;recv();?//打印?接收到的數據 $client-&gt;close();

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊7 分享