php websocket连接报错怎么解决

php websocket连接报错怎么解决,第1张

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代理
大多数虚拟主机服务商是不支持自己配置服务器的,只能传代码,所以无法完成


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13430950.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-04
下一篇 2023-08-04

发表评论

登录后才能评论

评论列表(0条)

保存