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->send($fd, "I am swoole"); //发送字符串给客户端 $serv->close($fd); // 注意:官方并不建议在这里关闭掉 }); //启动服务器 $serv->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->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->errCode}\n"); } $client->send("hello world\n"); echo $client->recv(); //打印 接收到的数据 $client->close();
以上是swoole客戶端無法連線怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!