PHP Swoole与TCP三次握手
握手常见问题
连接拒绝在 最常见的情况就是客户端去请求某个服务器,服务端没有绑定对应的端口。 测试代码如下,服务端代码: 1 <?php
2
3 $server = new SwooleServer('127.0.0.1',9501);
4
5 $server->set([
6 'work_num' => 2, 7 'backlog' => 128, 8 ]);
9
10 $server->on('connect',function ($server,$fd)
11 {
12 echo "Client: Connect.n";
13 });
14
15 $server->on('receive',$fd,$reactor_id,$data)
16 {
17 var_dump($data);
18 });
19
20 $server->on('close',function ()
21 {
22 var_dump('close');
23 });
24
25 $server->start();
这里,服务端绑定的端口是 启动服务器: 1 ~/codeDir/phpCode/hyperf-skeleton # php server.php
客户端代码: <?php
$client = new SwooleClient(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
var_dump($client->connect('127.0.0.1',9500));
这里,客户端请求的端口是 启动客户端: ~/codeDir/phpCode/hyperf-skeleton # php client.php Warning: SwooleClient::connect(): connect to server[127.0.0.1:9500] failed,Error: Connection refused[111] in /root/codeDir/phpCode/hyperf-skeleton/client.php on line 4 bool(false) ~/codeDir/phpCode/hyperf-skeleton # 我们发现,报错: Error: Connection refused[111] Operation now in progress这个错误的绝大部分原因是因为连接超时了。 丢包例如路由器、网关出现了故障,包被丢了。 错误ip例如客户端请求了一个错误的 测试代码如下,客户端代码: <?php
$client = new SwooleClient(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
var_dump($client->connect('8.8.8.8',9501));
这里,我访问的是谷歌的 启动客户端: ~/codeDir/phpCode/hyperf-skeleton # php client.php Warning: SwooleClient::connect(): connect to server[8.8.8.8:9501] failed,Error: Operation in progress[115] in /root/codeDir/phpCode/hyperf-skeleton/client.php on line 4 bool(false) ~/codeDir/phpCode/hyperf-skeleton # 我们发现,报错: Error: Operation in progress[115] backlog服务器在三次握手的最后一次,即收到客户端发来的 测试代码如下,服务端代码: 1 <?php
2
3 $server = new SwooleServer('127.0.0.1',9501, SWOOLE_BASE);
4
5 $server->set([
6 'work_num' => 2,$fd)
11 {
12 echo "Client: Connect.n";
13 sleep(1000);
14 });
15
16 $server->on('receive',$data)
17 {
18 var_dump($data);
19 });
20
21 $server->on('close',function ()
22 {
23 var_dump('close');
24 });
25
26 $server->start();
要想测试 这里,我们的 然后,我们通过 客户端代码: 1 <?php
2
3 $i = 0;
4 while (true)
5 {
6 $client = new SwooleClient(SWOOLE_SOCK_TCP, SWOOLE_SOCK_SYNC);
7 if ($client->connect('127.0.0.1',9501) == false)
8 {
9 break;
10 }
11 }
我们启动服务器: ~/codeDir/phpCode/hyperf-skeleton # php server.php 然后启动客户端: ~/codeDir/phpCode/hyperf-skeleton # php client.php 省略了其他的输出 bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) bool(true) Warning: SwooleClient::connect(): connect to server[127.0.0.1:9501] failed,Error: Operation in progress[115] in /root/codeDir/phpCode/hyperf-skeleton/client.php on line 7 bool(false) Warning: SwooleClient::connect(): connect to server[127.0.0.1:9501] failed,Error: Operation in progress[115] in /root/codeDir/phpCode/hyperf-skeleton/client.php on line 7 bool(false) ^C ~/codeDir/phpCode/hyperf-skeleton # 我们会发现,过一段时间,客户端这边会报错: Error: Operation in progress[115] 服务端这边输出: ~/codeDir/phpCode/hyperf-skeleton # php server.php Client: Connect. 因为当 SYN Flood除了三次握手成功之后会使用到的 与其有关的内核配置: tcp_max_syn_backlog tcp_synack_retries tcp_syncookies 其中,
(编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
