× 警告!旧版文档已经暂停维护,请查看新版文档。点击前往新版文档

Http\Server->on

注册事件回调函数,与Server->on相同,不同之处是:

  • Http\Server->on不接受onConnect/onReceive回调设置
  • Http\Server->on额外接受1种新的事件类型onRequest

onRequest事件

$http_server->on('request', function(swoole_http_request $request, swoole_http_response $response) {
     $response->end("<h1>hello swoole</h1>");
})

在收到一个完整的Http请求后,会回调此函数。回调函数共有2个参数:

  • $requestHttp请求信息对象,包含了header/get/post/cookie等相关信息
  • $responseHttp响应对象,支持cookie/header/statusHttp操作
  • onRequest回调函数返回时底层会销毁$request$response对象,如果未执行$response->end()操作,底层会自动执行一次$response->end("")

onRequest1.7.7或更高版本可用
$response/$request对象传递给其他函数时,不要加&引用符号
$response/$request对象传递给其他函数后,引用计数会增加,onRequest退出时不会销毁


  • 向东

    $response/$request 对象传递给其他函数时,不要加&引用符号,这是为什么呢,用&不是更能节省内存么?

  • 花生

    对象在php内核中本身就只有一份,加不加都无所谓

  • 向东

    非常感谢回复,赋值对象其实也只有一份,除非clone,我把它和基本的变量类型赋值搞混了。

  • laravela

    变量污染怎么解决呢?

  • Vijay

    实际跑了一晚上,将$response/$request传给其他函数,内存无增加,所以应该是可以销毁的

  • 火端

    $response/$request对象传递给其他函数后,引用计数会增加,onRequest退出时不会销毁

    这一句到底是不是真的,一般情况下都会传递给其它函数吧?如果不能自动销毁,如何手动销毁?有没有大神知道