php websocket连接报错一般是握手连接失败导致。
php 用websocket,从连接、建立、绑定、监听等,这些都需要手动去 *** 作。配置错误会导致无法连接。
下面是client和server端建立websocket连接示意图:
解析:
1、PHP 中处理 WEBSOCKET
WebSocket 连接是由客户端主动发起的,所以一切要从客户端出发。第一步是要解析拿到客户端发过来的 Sec-WebSocket-Key 字符串。
GET /chat >
2、提取 SEC-WEBSOCKET-KEY 信息
function getKey($req) {
$key = null;
if (preg_match("/Sec-WebSocket-Key: ()/r/n/", $req, $match)) {
$key = $match[1];
}
return $key;
}
3、加密 SEC-WEBSOCKET-KEY
function encry($req){
$key = $this->getKey($req);
$mask = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
return base64_encode(sha1($key '258EAFA5-E914-47DA-95CA-C5AB0DC85B11', true));
}
以上任何一个环节出错都会导致失败。
最近在学习Go语言,利用之前的项目作为案例进行重构。项目背景:php提供TCP服务,硬件连接服务器需要处理信息,然后将处理的信息在发送客户端,客户端拿到信息展示给用户。第一种方案客户端对发送信息的接口进行轮询,检查硬件是否有信息返回,这样不好太浪费资源;第二种方案采用websocket将信息主动发送给客户端,客户端做后续的展示和处理工作;所以最终采用websocket。PHP实现websocket采用GatewayWorker,经过商业论证还是很稳定的。在用Go语言重构项目的时候,需要用Go重新搭建Websocket,去网上查了一些资料,利用 gorilla/websocket 在嵌套web框架就可以实现websocket,目前采用Go语言的iris Web框架,接下来就说说我是怎么实现的。websocket需要php监听一个固定的端口,而不是请求的时候再去执行
一般的主机服务无法实现此功能
如果你有服务器的设置权限,可以在服务器上用php命令开启端口,再用nginx做一个Websocket代理
大多数虚拟主机服务商是不支持自己配置服务器的,只能传代码,所以无法完成
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)