028-86261949

当前位置:首页 > 技术交流 > Cygwin中swoole的服务器无法连接一直pending等待

Cygwin中swoole的服务器无法连接一直pending等待

2019/12/26 09:34 分类: 技术交流 浏览:1

首先说一下环境,由于swoole只能在linux环境中使用,开发者通常使用的windows系统,所以我的 swoole是安装在 Cygwin环境中的。Cygwin可以在windows系统中运行,提供一个类似linux命令行的环境。同时,也虚拟机不同,Cygwin可以直接使用系统资源(比如:使用端口),swoole开启的服务器应该是可以直接使用浏览器访问的。

 

然后说一下问题,根据官方网站的swoole案例写了以后,打死都访问不了。浏览器一直在pending等待服务器响应。
复制swoole官方网站的案例:


<?php
$http = new swoole_http_server("127.0.0.1", 9501);

$http->on("start", function ($server) {
    echo "Swoole http server is started at http://127.0.0.1:9501\n";
});

$http->on("request", function ($request, $response) {
    $response->header("Content-Type", "text/plain");
    $response->end("Hello World\n");
});

$http->start();


运行服务器:


浏览器访问:

问题出现了,一直等待,直到永远!!!

在百度、Google、 sogou.com 、 so.com 各大搜索引擎折腾了一天。让人崩溃的是 Cygwin重装过3次,关闭了杀毒软件、防火墙,仔细查阅了swoole的各种文档、各种文章,依然是一直等待。更让人崩溃的是,终于在swoole安装包中发现了一个 examples目录,下面有一个 http目录,里面有一个 server.php 文件。

复制过来运行一下,居然可以使用了,不再是pending等待了。 仔细一看,就多了一个参数:

估计是官网上的代码与最新下载的代码版本不同,或者 Cygwin与linux中pecl安装的swoole默认环境不同,所以必须写出第3个参数 SWOOLE_BASE。
于是,问题就这么解决了。

最后整理一下demo的代码如下:
<?php
$http = new swoole_http_server("127.0.0.1", 9501, SWOOLE_BASE);

$http->on("request", function ($request, $response) {
    $response->header("Content-Type", "text/html");
    $response->end("Hello World\n");
});

$http->start();

效果:

#标签:Cygwin,swoole,pending等待