Http\Server

Http\Server继承自Server,是一个完整的http服务器实现。Http\Server支持同步和异步2种模式。

Http/WebSocket服务器都是继承自Server,所以Server提供的API,如task/finish/tick等都可以使用

无论是同步模式还是异步模式,Http\Server都可以维持大量TCP客户端连接。同步/异步仅仅体现在对请求的处理方式上。

示例:

use Swoole\Http\Server;

$http = new Server("127.0.0.1", 9501);
$http->on('request', function ($request, $response) {
    $response->end("<h1>Hello Swoole. #".rand(1000, 9999)."</h1>");
});
$http->start();

同步模式

这种模式等同于nginx+php-fpm/apache,它需要设置大量Worker进程来完成并发请求处理。Worker进程内可以使用同步阻塞IO,编程方式与普通PHP Web程序完全一致。

php-fpm/apache不同的是,客户端连接并不会独占进程,服务器依然可以应对大量并发连接。

异步模式

这种模式下整个服务器是异步非阻塞的,服务器可以应对大规模的并发连接和并发请求。但编程方式需要完全使用异步API,如MySQLredishttp_clientfile_get_contentssleep等阻塞IO操作必须切换为异步的方式,如异步ClientEventTimerAPI


  • dormscript

    <?php $http = new swoole_http_server("0.0.0.0", 4333); $http->on('request', "mycallback"); $http->start(); function mycallback($request, $response) { $response->end("hello world\n"); }

    我设置的一个工作进程,通过ps看到如下: sh-3.2# ps -ef | grep swoole 0 26320 4085 0 11:41下午 ttys000 0:00.06 /usr/local/php/bin/php test_swoole.php 0 26321 26320 0 11:41下午 ttys000 0:00.00 /usr/local/php/bin/php test_swoole.php 0 26322 26321 0 11:41下午 ttys000 0:00.00 /usr/local/php/bin/php test_swoole.php 0 26323 26321 0 11:41下午 ttys000 0:00.00 /usr/local/php/bin/php test_swoole.php 0 26324 26321 0 11:41下午 ttys000 0:00.00 /usr/local/php/bin/php test_swoole.php 0 26325 26321 0 11:41下午 ttys000 0:00.00 /usr/local/php/bin/php test_swoole.php

    设置的无效吗?

  • dormscript

    $http->set(array( 'worker_num' => 1, //工作进程数量 )); 加上这个,ps结果: sh-3.2# ps -ef | grep swoole 0 26337 4085 0 11:51下午 ttys000 0:00.05 /usr/local/php/bin/php test_swoole.php 0 26338 26337 0 11:51下午 ttys000 0:00.00 /usr/local/php/bin/php test_swoole.php 0 26339 26338 0 11:51下午 ttys000 0:00.00 /usr/local/php/bin/php test_swoole.php

    怎么设置才能是单进程?

  • 猪肉荣涅槃

    在写一个HTTP请求 POST内容为json 并转换为mysql 数据存储的应用,请问 swoole_http_server事件回调里面如何调用 swoole_server->task ?

  • 猪肉荣涅槃

    尝试了,目前用$GLOBALS['']解决, 但不是那么优雅

  • 谢min

    global $serv; $serv->task($data);

  • 陈伟川V

    应该是没有这个设置,是同步/异步指的是程序内 I/O 的处理方式。比如 MySQL 都是同步读写就是同步模式,如果都是异步读写就是异步模式。
    这些处理都得开发者自己去把控,二者的程序模式和编写差异很大,不是理解为一个开关去把控的。 只要用到了同步的I/O处理,就算是同步模式。但实际上也可以部分I/O丢去异步处理吧。

  • 小六HI

    php server.php ,如何后台运行呢,如果关闭黑窗口任务不是结束了吗?

  • 怡文圣美(赵杰)

    问: 如果worker中存放长连接的pdo, 试图用worker实现连接池, 使用同步模式, 但我看到这句话 "与php-fpm/apache不同的是,客户端连接并不会独占进程,服务器依然可以应对大量并发连接。" 高并发下, 同一时间会有多个连接同时访问同一个pdo对象吗?

  • Bill

    http/websocket服务器都是继承自swoole_server,所以swoole_server提供的API,如task/finish/tick等都可以使用 问题:如何在代码中获取 swoole_server对象呢,http_server回调函数(request,response)的参数中没有server参数,我想调用tick,请问怎么处理?

  • 傲雪孤魂

    $http->on('request', function ($request, $response) use ($http) {
        // do something
    }
    

  • No bug

    1

  • 古月

    ~~~php

  • 古月

    我的代码为什么发不出俩?

  • littlexiaoshuishui

    object(Swoole\Http\Request)#26 (9) { ["fd"]=> int(3) ["header"]=> array(12) { ["host"]=> string(14) "swool.com:8813" ["connection"]=> string(7) "Upgrade" ["pragma"]=> string(8) "no-cache" ["cache-control"]=> string(8) "no-cache" ["user-agent"]=> string(135) "Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1" ["upgrade"]=> string(9) "websocket" ["origin"]=> string(21) "http://swool.com:8813" ["sec-websocket-version"]=> string(2) "13" ["accept-encoding"]=> string(13) "gzip, deflate" ["accept-language"]=> string(23) "zh-CN,zh;q=0.9,en;q=0.8" ["sec-websocket-key"]=> string(24) "ZSnCa3+c8bAkj6rXFaaiwg==" ["sec-websocket-extensions"]=> string(42) "permessage-deflate; client_max_window_bits" } ["server"]=> array(11) { ["request_method"]=> string(3) "GET" ["request_uri"]=> string(1) "/" ["path_info"]=> string(1) "/" ["request_time"]=> int(1546502349) ["request_time_float"]=> float(1546502350.0315) ["server_port"]=> int(8813) ["remote_port"]=> int(60641) ["remote_addr"]=> string(13) "183.6.137.172" ["master_time"]=> int(1546502349) ["server_protocol"]=> string(8) "HTTP/1.1" ["server_software"]=> string(18) "swoole-http-server" } ["request"]=> NULL ["cookie"]=> array(2) { ["Hm_lvt_b393d153aeb26b46e9431fabaf0f6190"]=> string(21) "1544865351,1546152219" ["Hm_lpvt_b393d153aeb26b46e9431fabaf0f6190"]=> string(10) "1546163472" } ["get"]=> NULL ["files"]=> NULL ["post"]=> NULL ["tmpfiles"]=> NULL }