我想在與GatewayWorker建立連接前對請求連接的來源進(jìn)行驗(yàn)證,因此在頁面中請求連接時傳入了token,請求代碼如下:
let token = 'abc';
ws = new WebSocket('ws://192.168.0.199:8120', [token]);
服務(wù)器端可以通過Sec-WebSocket-Protocol讀取到token值,但驗(yàn)證通過后客戶端還是提示連接失敗,也沒有具體的失敗原因信息
在網(wǎng)上查了查,似乎是服務(wù)器端需要將Sec-WebSocket-Protocol中的內(nèi)容回寫到Response的Header中,我初次使用GatewayWorker,不知道要如何將子協(xié)議寫入到Response中, 在GatewayWorker官方文檔中沒有找到相關(guān)的信息,哪位朋友知道這個問題要如何處理呢?
$connection->onWebSocketConnect = function($connection , $http_header){
if (!empty($_SERVER['HTTP_SEC_WEBSOCKET_PROTOCOL'])) {
//注意 sub_protocols 根據(jù)前端傳的是字符串還是數(shù)組自行處理下
$sub_protocols = $_SERVER['HTTP_SEC_WEBSOCKET_PROTOCOL'];
$connection->headers = [
'Sec-WebSocket-Protocol: ' . $sub_protocols,
];
}
};
我在GatewayWorker中嘗試這樣設(shè)置(在BusinessWorker中的onGatewayMessage回調(diào)中實(shí)現(xiàn)):
if(isset($data["body"])){
if(isset($data["body"]["server"])){
if(isset($data["body"]["server"]["HTTP_SEC_WEBSOCKET_PROTOCOL"])){
//var_dump($data["body"]["server"]["HTTP_SEC_WEBSOCKET_PROTOCOL"]);
$sub_protocols = $data["body"]["server"]["HTTP_SEC_WEBSOCKET_PROTOCOL"];
$connection->headers = [
'Sec-WebSocket-Protocol: '.$sub_protocols,
];
}
}
}
這樣做,但是還是沒有生效