网页中建立ws连接时,如果传入了子协议就会提示连接失败,去掉子协议就可以连接成功

0

我想在与GatewayWorker建立连接前对请求连接的来源进行验证,因此在页面中请求连接时传入了token,请求代码如下:


let token = 'abc';
ws = new WebSocket('ws://192.168.0.199:8120', [token]);

服务器端可以通过Sec-WebSocket-Protocol读取到token值,但验证通过后客户端还是提示连接失败,也没有具体的失败原因信息


截图


在网上查了查,似乎是服务器端需要将Sec-WebSocket-Protocol中的内容回写到Response的Header中,我初次使用GatewayWorker,不知道要如何将子协议写入到Response中, 在GatewayWorker官方文档中没有找到相关的信息,哪位朋友知道这个问题要如何处理呢?

已邀请:

blogdaren - 专注C编程、PHP内核、LINUX、VIM【http://www.phpcreeper.com】

赞同来自: gcollar

$connection->onWebSocketConnect = function($connection , $http_header){
if (!empty($_SERVER['HTTP_SEC_WEBSOCKET_PROTOCOL'])) {
//注意 sub_protocols 根据前端传的是字符串还是数组自行处理下
$sub_protocols = $_SERVER['HTTP_SEC_WEBSOCKET_PROTOCOL'];
$connection->headers = [
'Sec-WebSocket-Protocol: ' . $sub_protocols,
];
}
};

小七他哥 - 80后IT男

赞同来自:

可以参考这个帖子:https://wenda.workerman.net/question/5140

gcollar

赞同来自:

Query传递token的方式已经调试通过了,我想再用子协议的方式试试看,还请知道的朋友指点一下,谢谢

要回复问题请先登录注册