2

我正在試用Spring集成和Web套接字的實驗。我不得不說,網絡套接字對我來說真的很新鮮,也許我還沒有明白一些基礎知識。使用Spring集成將消息推送到Websocket Outbount

我想要做什麼。我的後端正在生成消息,並通過Spring-Integration系統進行處理。這一切都很好。我的想法是,我不確定這是否奏效。我有一個頻道,至少有消息到達,一個發佈 - 訂閱者頻道。現在我想使用一個int-websocket.outbound-channel-adapter將消息推送到瀏覽器。

我的發佈 - 訂閱通道被命名爲​​

我的配置看起來像如下:

<bean id="webSocketSessionStore" class="org.springframework.integration.metadata.SimpleMetadataStore"/> 

<int-websocket:server-container id="serverWebSocketContainer" path="sass"> 
    <int-websocket:sockjs /> 
</int-websocket:server-container> 

<int:chain input-channel="ticketOutgoingChannel"> 
    <int:header-enricher> 
     <int:header 
      name="#{T(org.springframework.messaging.simp.SimpMessageHeaderAccessor).SESSION_ID_HEADER}" 
      expression="webSocketSessionStore.sessionId" 
     /> 
    </int:header-enricher> 
    <int-websocket:outbound-channel-adapter container="serverWebSocketContainer" /> 
</int:chain> 

我的一個問題吧,我不`噸知道如何獲得的sessionId對WebSocket的,如果我有它,如何將它添加到消息。

這是消息到達的渠道,我想推送給客戶端。

<int:publish-subscribe-channel 
    id="ticketOutgoingChannel" 
    datatype="...model.Ticket" 
/> 

請在xml中提供提示。我更喜歡STS圖形支持的xml cos,以便更好地理解。後來我確定我會使用Java-Config。

預先感謝您。

回答

1

請發現WebSocket Sample考慮爲您的使用情況。

在推送到瀏覽器之前,它必須連接。我這樣做,用簡單的JavaScript樣本中:

<script type="text/javascript"> 
    var sock = new SockJS('http://localhost:8080/time'); 
    sock.onopen = function() { 
     document.getElementById('time').innerHTML = 'Connecting...'; 
    }; 
    sock.onmessage = function (e) { 
     document.getElementById('time').innerHTML = e.data; 
    }; 
    sock.onclose = function() { 
     document.getElementById('time').innerHTML = "Server closed connection or hasn't been started"; 
    }; 
</script> 

當會話連接到可以從 serverWebSocketContainer.getSessions()獲得所有他們的服務器。

然後您可以對它們進行迭代(<splitter>)並應用您的<int:header-enricher>

+0

嗨阿爾喬姆,謝謝你的回答。我已經檢查過這個例子,我想這可能會有所幫助。當我再次有時間時,我會接受更仔細的檢查,然後回覆。感謝患者:-) –

相關問題