本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設置需要子協議的$connect
WebSocket 路由
客戶端可以使用該Sec-WebSocket-Protocol
字段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 APIs,請參閱叫用 WebSocket API。