2014-09-10 131 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); 
} 

希望这将有助于未来的搜索...