方式1、方式2可以混用,否则会出现握手无响应(是因为有个 checkStartsWith 参数需要设置为 true)
1 | io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandshakeHandler#channelRead |
方式1 基于 url 参数方式
1 | const socket = new WebSocket('ws://127.0.0.1:8080/ws?token=xxx') |
1 |
|
1 |
|
1 |
|
方式2 基于 subprotocol 方式
长度受限制,浏览器实现、http 请求头长度(nginx、apache),netty 服务端可以配置 * 匹配所有的协议,或者在 selectSubprotocol 匹配指定前缀开始的协议。
1 | const jwtToken = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...'; // 你的JWT Token |
1 |
|
1 |
|
io.netty.handler.codec.http.websocketx.WebSocketServerHandshaker13 重写 selectSubprotocol 方法
1 | package io.netty.handler.codec.http.websocketx; |
方式3 基于 消息 方式(推荐)
握手成功后,第一条消息是认证消息,后面是业务消息
1 |
|
1 |
|