本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設置需要子協議的$connect
WebSocket 路由
客戶端可以使用該Sec-WebSocket-Protocol
字段在連接到您的 WebSocket API 期間請求WebSocket 子協議$connect
路由整合,以允許只有在用戶端請求您的 API 支援的子通訊協定時才允許連線。
下列範例 Lambda 函數會將 Sec-WebSocket-Protocol
標題傳回用戶端。只有在用戶端指定 myprotocol
子協議時,該函數才會建立到您的 API 的連線。
如需建立此 AWS CloudFormation 範例 API 和 Lambda 代理整合的範本,請參閱ws-subprotocol.yaml
。
export const handler = async (event) => { if (event.headers != undefined) { const headers = toLowerCaseProperties(event.headers); if (headers['sec-websocket-protocol'] != undefined) { const subprotocolHeader = headers['sec-websocket-protocol']; const subprotocols = subprotocolHeader.split(','); if (subprotocols.indexOf('myprotocol') >= 0) { const response = { statusCode: 200, headers: { "Sec-WebSocket-Protocol" : "myprotocol" } }; return response; } } } const response = { statusCode: 400 }; return response; }; function toLowerCaseProperties(obj) { var wrapper = {}; for (var key in obj) { wrapper[key.toLowerCase()] = obj[key]; } return wrapper; }
您可以使用 wscat
-s
旗標來指定連線期間的子通訊協定。
下列命令會嘗試使用不受支援的子通訊協定進行連線。因為用戶端指定 chat1
子通訊協定,Lambda 整合會傳回 400 錯誤訊息,而且連線失敗。
wscat -c wss://
api-id
.execute-api.region
.amazonaws.com/beta
-s chat1error: Unexpected server response: 400
下列命令在連線要求中包含支援的子通訊協定。Lambda 整合允許連線。
wscat -c wss://
api-id
.execute-api.region
.amazonaws.com/beta
-s chat1,myprotocolconnected (press CTRL+C to quit)
若要進一步瞭解呼叫 WebSocket API,請參閱叫用 WebSocket API。