【问题标题】:How set the nativeHeaders to Spring Java SockJS client on CONNECT frame如何在 CONNECT 框架上将 nativeHeaders 设置为 Spring Java SockJS 客户端
【发布时间】:2017-01-20 10:11:58
【问题描述】:

我实际上使用 Spring Famework 4.3.2 为 WebSocket over STOMP 实现了 Java SockJS 客户端。 我的 Javascript 客户端创建了一个 Java 客户端不创建的 nativeHeaders。

Java 客户端:

StandardWebSocketClient webSocketClient = new StandardWebSocketClient();
List<Transport> transports = new ArrayList<>(2);
transports.add(new WebSocketTransport(webSocketClient));
SockJsClient sockJsClient = new SockJsClient(transports);   
        WebSocketStompClient stompClient = new WebSocketStompClient(sockJsClient);
stompClient.setMessageConverter(new SimpleMessageConverter());
stompClient.setTaskScheduler(taskScheduler);
StompSessionHandlerImp stompSessionHandlerImp = new StompSessionHandlerImp();

WebSocketHttpHeaders handshakeHeaders = new WebSocketHttpHeaders();
handshakeHeaders.add("tokenGroup", "192:168:99:3::DEMO");
handshakeHeaders.add("targetNickname", "NULL_BORRAR");      

stompClient.connect(stompUrlEndpoint.toString(), handshakeHeaders, stompSessionHandlerImp, new Object[0]);

JavaScript:

var from = "192:168:99:3::DEMO";
var targetNickname = "";
stompClient.connect({tokenGroup:from, targetNickname: targetNickname}, function(frame) {
...
}

在服务器端,使用 ChannelInterceptorAdapter 的实现来查看输出。 JavaScript 客户端在 nativeHeaders 中包含 tokenGroup 和 targetNickname。

Java客户端websocket升级握手:

request.getHeaders(): {Origin=[localhost:8080], Sec-WebSocket-Key=[tVFgflo2od6obTCKW/Y1Ng==],
Connection=[Upgrade], Sec-WebSocket-Version=[13], Host=[localhost:8080], 
Upgrade=[websocket],
**targetNickname=[NULL_BORRAR], tokenGroup=[192:168:99:3::DEMO]**}

Java 客户端 websocket CONNECT Stomp 消息:

message: GenericMessage [payload=byte[0], headers={simpMessageType=CONNECT, stompCommand=CONNECT, **nativeHeaders={heart-beat=[10000,10000], accept-version=[1.1,1.2]}**, simpSessionAttributes={ip=/127.0.0.1:53640}, simpHeartbeat=[J@907d80, simpSessionId=2c150f9d47504b76a896ada101e8e1bc}]

JavaScript 客户端 websocket 升级握手:

request.getHeaders(): {Origin=[http://localhost:3000], Sec-WebSocket-Key=[slsZkCofKgaFZyxsADbzlw==], 
User-Agent=[Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36],
Connection=[Upgrade], Sec-WebSocket-Version=[13], Host=[localhost:8080],
Accept-Encoding=[gzip, deflate, sdch], DNT=[1], Pragma=[no-cache],
Upgrade=[websocket], Sec-WebSocket-Extensions=[permessage-deflate; client_max_window_bits], Cache-Control=[no-cache], Accept-Language=[en-US,en;q=0.8]}

JavaScript 客户端 Websocket CONNECT Stomp 消息:

message: GenericMessage [payload=byte[0], headers={simpMessageType=CONNECT, stompCommand=CONNECT, **nativeHeaders={tokenGroup=[192:168:99:4::DEMO], targetNickname=[], accept-version=[1.1,1.0], heart-beat=[10000,10000]}**, simpSessionAttributes={ip=/127.0.0.1:55150}, simpHeartbeat=[J@915deb, simpSessionId=g3pcbfvj}]

可以看到Java客户端有nativeHeaders={heart-beat=[10000,10000],accept-version=[1.1,1.2]},Javacript有nativeHeaders={tokenGroup =[192:168:99:4::DEMO], targetNickname=[], accept-version=[1.1,1.0], heart-beat=[10000,10000]}

如何将“tokenGroup”包含在 Java 客户端中? Java 和 JavaScript 客户端工作方式不同正常吗?

【问题讨论】:

    标签: stomp spring-websocket sockjs java-websocket


    【解决方案1】:

    解决方案:

    您需要使用包含 StompHeaders 的重载方法。

    WebSocketHttpHeaders handshakeHeaders = new WebSocketHttpHeaders();
    StompHeaders connectHeaders = new StompHeaders();
    connectHeaders.add("tokenGroup", "192:168:99:3::DEMO");
    stompClient.connect(stompUrlEndpoint.toString(), handshakeHeaders, connectHeaders, stompSessionHandlerImp, new Object[0]);
    

    现在这会在服务器中产生下一个:

    message: GenericMessage [payload=byte[0], headers={simpMessageType=CONNECT, stompCommand=CONNECT, nativeHeaders={tokenGroup=[192:168:99:3::DEMO], heart-beat=[10000,10000], accept-version=[1.1,1.2]}, simpSessionAttributes={ip=/127.0.0.1:57773}, simpHeartbeat=[J@1ac7a81, simpSessionId=a1648581b94d422e8b88258efad36ffb}]
    

    nativeHeader 现在在连接时包含 tokenGrouo 标头。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-27
      • 2016-03-21
      • 1970-01-01
      • 2011-10-19
      • 2022-10-14
      • 2015-10-26
      • 2016-04-07
      相关资源
      最近更新 更多