2014-12-03 35 views
0

[已棄用] ok我打開一個到特定端口的連接,並保持打開狀態,因此我無法打開到同一端口的第二個連接。多個websockets java

看到我花了太多時間才找到答案,我將要離開這個問題。

我想知道是否可以在同一個網頁上運行多個websocket實例。 我正在構建一個僅用於學習的應用程序,我想在同一頁面中顯示通知和單獨的通知框。

我在java中創建websocket,我使用struts 2框架和javascript來處理客戶端。

<script language="javascript" type="text/javascript"> 
     var wsPath = "<s:url value='/websocket' />" + isComment + id; 
     var wsUri = "ws://" + window.location.host + wsPath; 
     var websocket = new WebSocket(wsUri); 

我要去嘗試創建功能的二次「集」和相同的WebSocket類的新實例,有這樣的事情:

websocket.onopen = function(evt) { onOpen(evt) }; 
websocketnotifications.onopen = function(evt) { onOpenNotifications(evt) }; 

我想知道,如果這是正常的做法或者是否有更好的方法。因爲我沒有找到任何其他解決方案,我想以正確的方式實施它。

+0

不,你不能在一個單頁多的WebSocket。 – Secondo 2014-12-03 03:19:13

+0

您使用FullFeatured Broker嗎?或者你可以發佈你的配置? – Secondo 2014-12-03 03:25:50

+0

'好吧,我打開一個連接到一個特定的端口,並保持打開,因此我不能打開第二個連接到同一個端口'是否也在同一頁?爲什麼不使用當前的websocket? – Secondo 2014-12-03 03:28:32

回答

0

這是你想要實現的嗎?有多個功能可以從服務器偵聽?

示例代碼段

var contextPath = "${pageContext.request.contextPath}"; 

    var socket = new SockJS("http://localhost:9991/BlackJackServer/ws"); 

    var stompClient = Stomp.over(socket); 

    var connectCallback = function() { 
      // This how I populate multiple functions when server send a message to this topics 
      stompClient.subscribe('/topic/lobby', renderLobby); 
      stompClient.subscribe('/topic/${player.username}/updatePlayerStatus', renderPlayerStatus); 
      stompClient.subscribe('/topic/${player.username}/renderPlayerChips', renderPlayerChips); 
    }; 

    var errorCallback = function(error) { 
      alert("Server Maintenance"); 
    }; 

    stompClient.connect({}, connectCallback, errorCallback); 

    //Close the WebSocket When Refreshing or Reloading the Page.  
    window.onbeforeunload = function() { 
     // disable onclose handler first 
     socket.onclose = function() {}; 
     socket.close(); 
    }; 

    function renderPlayerStatus(response){ 
     var status = response.body; 
     if(status == '"ONLINE"'){ 
      location.reload(); 
     } 
    } 

    function renderPlayerChips(response){ 
     var updatedPlayerChips = response.body; 
     $('#chips').empty(); 
     $('#chips').append("Chips : "+updatedPlayerChips); 
    }