swoole_http_client->upgrade

最后更新于:2022-04-02 06:39:41

# swoole\_http\_client->upgrade [TOC] 发起WebSocket握手请求,并将连接升级为WebSocket。 ~~~ function swoole_http_client->upgrade(string $path, callable $callback); ~~~ * $path URL路径 * $callback 握手成功或失败后回调此函数 * 使用`Upgrade`方法必须设置`onMessage`回调函数 ## 使用实例 ~~~ $cli = new swoole_http_client('127.0.0.1', 9501); $cli->on('message', function ($_cli, $frame) { var_dump($frame); }); $cli->upgrade('/', function ($cli) { echo $cli->body; $cli->push("hello world"); }); ~~~ ## onMessage回调 ~~~ function onMessage(swoole_http_client $client, swoole_websocket_frame $frame); ~~~ * $client 客户端对象,可调用`push`方法向服务器发送数据 * $frame WebSocket数据帧,可参考[swoole\_websocket\_server->onMessage](https://wiki.swoole.com/wiki/page/402.html) ## 握手失败 某些`WebSocket`服务器对于客户端要求非常严格,`Client`需要非常接近`Chrome`等浏览器才可以握手成功。 可以通过增加参数和`Http`头,尽可能地让`Client`与`Chrome`等浏览器行为保持一致。 ~~~ $client->set([ 'websocket_mask' => true, 'ssl_host_name' => 'www.yourdomain.com', ]); $client->setHeaders([ 'Host' => 'www.yourdomain.com', 'UserAgent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' ]); ~~~ * `websocket_mask`启用数据掩码,浏览器总是对数据进行掩码处理,因为存在较多性能消耗,默认未开启 * `ssl_host_name`设置`openssl`域名,`SSL`握手时可能会验证此参数 * `Host`设置`Http`的`Host`头,某些服务器会验证此项信息
';