我想知道如何定义订阅者路径。
例如,订阅路径的声明
stompClient.subscribe("/topic/simplemessagesresponse", function(servermessage) {
为什么有两个部分'主题'和'simplemessageresponse'..他们的参考。有多少这样的域名部分可以存在?为什么?我的问题不仅在于客户端,还在于服务器端。 SimpMessagingTemplate.convertAndSend("/topic/simplemessagesresponse", "Message to client");
有一些教程展示了websocket服务器和客户端示例。但没有足够的规则细节来声明用户路径以及如何找到用户路径。
在服务器端和客户端声明路径时,更改路径的依赖关系是什么。我认为另一个similar question 是因为写入websocket客户端的页面的位置更改而引发的。
答案 0 :(得分:1)
引用STOMP规范文档:
请注意,STOMP将此目标视为不透明字符串而不是 传递语义由目的地名称假定。您 应查阅您的STOMP服务器文档以了解如何操作 构造一个目的地名称,为您提供交付语义 您的应用程序需要。
这意味着目标语义是特定于代理的:
答案 1 :(得分:1)
我按照这个blog实现了websocket stomp。 我用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;
}
}
网络套接字配置
<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 );
}
希望这有助于下一次搜索...