2014-09-10 91 views
0

我想知道如何定義訂戶路徑。如何定義Spring WebSocket訂閱路徑

例如,訂閱路徑

stompClient.subscribe("/topic/simplemessagesresponse", function(servermessage) { 

的聲明爲什麼有兩個部分「主題」和「simplemessageresponse」 ..他們參考,有什麼。有多少這樣的域名可以在那裏,爲什麼?我的問題不僅在客戶端,而且在服務器端。 SimpMessagingTemplate.convertAndSend("/topic/simplemessagesresponse", "Message to client");

有一些教程顯示websocket服務器和客戶端示例。但沒有足夠的規則細節來聲明訂戶路徑以及如何找到訂戶路徑。

什麼是在服務器和客戶端聲明的時候改變路徑的依賴關係。我認爲另一個similar question是因爲寫入websocket客戶端的頁面的位置變化而引發的。

回答

1

引述STOMP規範文檔:

注意STOMP對待這個目的地的不透明的字符串,而沒有 傳遞語義是由目的地的名稱假設。您需要諮詢您的STOMP服務器的文檔以瞭解如何構建一個目標名稱,以便爲您提供應用程序所需的傳送語義 。

這意味着,目標語義是特定於代理:

1

我已經實施了websocket stomp,按照這個blog。 我用SimpMessagingTemplate替換了@SendTo。

這裏是我的樣品ChatController

@Autowired 
private SimpMessagingTemplate simpMessagingTemplate; 

@MessageMapping("/dualchart") 
@ResponseBody 
public void dualchat(MessageDTO message) { 
    // forward message to destination 
    String destination = "/topic/dualchat/" + message.getToUser(); 
    simpMessagingTemplate.convertAndSend(destination, message); 
} 

MessageDTO

@JsonIgnoreProperties 
public class MessageDTO extends BaseModel { 
    private String fromUser; 
    private String toUser; 
    private String message; 
    public String getFromUser() { 
     return fromUser; 
    } 
     public void setFromUser(String fromUser) { 
     this.fromUser = fromUser; 
    } 
    public String getToUser() { 
     return toUser; 
    } 
    public void setToUser(String toUser) { 
     this.toUser = toUser; 
    } 
    public String getMessage() { 
     return message; 
    } 
    public void setMessage(String message) { 
     this.message = message; 
    } 
} 

web套接字配置

<websocket:message-broker application-destination-prefix="/app"> 
    <websocket:stomp-endpoint path="/dualchat"> 
     <websocket:sockjs /> 
    </websocket:stomp-endpoint> 
    <websocket:simple-broker prefix="/topic" /> 
</websocket:message-broker> 

的Javascript

var socket = new SockJS("/starter.web.admin/dualchat"); 
var stompClient = Stomp.over(page.socket); 
stompClient.connect({}, socketJsConnectedCallback, socketJsErrorCallback); 

function socketJsConnectedCallback() { 
    var myId = "111"; // replace this Id 
    stompClient.subscribe('/topic/dualchat/' + myId, function(message) { 
     console.log("you reveived a message::::::::::" + JSON.stringify(message)); 
     // you have message, and you can do anything with it 
    }); 
} 
function socketJsErrorCallback(error){console.log(error);} 

function sendMessage(message) { 
    var data = { 
     toUser : "1", 
     message : message 
    } 
    stompClient.send("/app/dualchat", {}, JSON.stringify(data); 
} 

希望這將有助於未來的搜索...