一、Http继承Tcp后,不能使用onConnect/onReceive
二、tcp怎么长连接(只返回一次)
//怎么让客户端保持长链接???设置长超时 + 服务端长时间不返回信息(sleep()函数模拟)
三、由 一 可知: 有继承关系的只使用最后一个子类 是很强大类,包含功能最多。
请在子类中放心使用父类的东西
四、tcp客户端//一个链接只能使用一次send函数? 两次会拼接在一起发送。。。
五、//官方解释:在 onTask 回调函数中 return 字符串,等同于调用 finish https://wiki.swoole.com/#/server/methods?id=finish
六、//官方给出的怎么给http客户端返回数据【一种】
$result = $server->taskCo($tasks, 1);
$response->end('Test End, Result: ' . var_export($result, true));
七、http可以接受websocket请求。
start()
启动 HTTP 服务器
启动后开始监听端口,并接收新的 HTTP 和 WebSocket 请求。
八、妈的,http可以被tcp客户端连接,但不能接受数据。
九、使用websocket完成http代码(两模式共存)
1、怎么判断是websocket连接还是http连接 isEstablished($fd)
2、$response->header()/end()必须写在foreach外面,否则报错。
$this->server->on('request', function ($request, $response) {
$response->header("Content-type", "text/html;charset=utf-8");
// 接收http请求从get获取message参数的值,给用户推送
// $this->server->connections 遍历所有websocket连接用户的fd,给所有用户推送
foreach ($this->server->connections as $fd) {
// 需要先判断是否是正确的websocket连接,否则有可能会push失败
if ($this->server->isEstablished($fd)) {
$this->server->push($fd, $request->get['message']);
}else{ ///这里有可能是http连接,而不是websocket连接。 【connections属性是tcp的属性,不能确定http、websocket哪个在用】
// $response->header("Content-type", "text/html;charset=utf-8");
echo "没有这个else,http请求会有问题【没有websocket连接的前提下】";
}
}
$response->end("<h1>没有websocket客户端连接. 服务器的连接:文件描述符#".$fd."</h1>");
});
十、fd文件描述符找不到~session#1不存在
tcp客户端没有设置·$client->recv();
NOTICE swFactoryProcess_finish (ERRNO 1005): connection[fd=2] does not exists
tcp连接超时,让服务器找不到客户端fd了。(测试中使用了sleep)
NOTICE swServer_master_send (ERRNO 1005): send 2 byte failed, session#1 does not exist
十一、tcp每连接一次(刷新一次,即使用了close())服务器收到的fd文件描述符也会加1.
十二、 进程隔离的示例中,Google浏览器每刷新一次,有两次request问题。
妈的,浏览器自己会访问服务器地址下的facicon.ico。
必须开启’dispatch_mode’ => 1,才能轻易的看到效果。默认是2.