[英]Websockets Using Spring + SockJS + STOMP on Magnolia CMS
[英]Custom Stomp Headers using Spring websockets
我有一個基本的spring websocket應用程序,它目前向訂閱者發送基本數據。 目前,系統使用SimpMessageSendingOperations
類作為消息處理程序。 如果我調用SimpMessageSendingOperations.convertAndSend(destination, object)
則訂閱的客戶端將轉換和接收該對象。
我希望能夠向客戶端發送自定義標頭。 我嘗試使用SimpMessageSendingOperations.convertAndSend(destination, object, headers)
方法來執行此操作。 但是,自定義標頭不包含在stomp消息中。
通過代碼調試它看起來像StompHeaderAccessor.toStompHeaderMap()
方法調用toNativeHeaderMap()
,它使用本toNativeHeaderMap()
和原始本toNativeHeaderMap()
映射來構建stomp頭。
有沒有辦法將自定義標頭添加到stomp消息?
StompHeaderAccessor擴展了NativeMessageHeaderAccessor,它似乎是非stomp標頭所在的位置,除了它們都存儲在名為nativeHeaders的單個標頭中 - 它本身就是一個映射。
@MessageMapping("/hello")
@SendTo("/topic/greetings")
public GenericMessage<Greeting> greeting(HelloMessage message) throws Exception {
Map<String, List<String>> nativeHeaders = new HashMap<>();
nativeHeaders.put("hello", Collections.singletonList("world"));
Map<String,Object> headers = new HashMap<>();
headers.put(NativeMessageHeaderAccessor.NATIVE_HEADERS, nativeHeaders);
return new GenericMessage<Greeting>(new Greeting("Hello, " + message.getName() + "!"), headers);
}
用於將自定義標頭包裝到nativeHeaders標頭的簡單攔截器服務器端應足以在客戶端公開它們作為映射message.headers.nativeHeaders的位置。 同樣地,您可以編寫一個客戶端攔截器來將nativeHeaders移動到常規頭中 - 因此在您的客戶端知道該消息之前,所有預期的頭文件都只是在message.headers中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.