首頁 > php框架 > Swoole > 主體

swoole客戶端無法連線怎麼辦

藏色散人
發布: 2020-04-10 09:47:21
原創
3927 人瀏覽過

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(&#39;receive&#39;, 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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板