如何定义Spring WebSocket订户路径

时间:2014-09-10 12:57:40

标签: javascript spring websocket sockjs

我想知道如何定义订阅者路径。

例如,订阅路径的声明

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

为什么有两个部分'主题'和'simplemessageresponse'..他们的参考。有多少这样的域名部分可以存在?为什么?我的问题不仅在于客户端,还在于服务器端。 SimpMessagingTemplate.convertAndSend("/topic/simplemessagesresponse", "Message to client");

有一些教程展示了websocket服务器和客户端示例。但没有足够的规则细节来声明用户路径以及如何找到用户路径。

在服务器端和客户端声明路径时,更改路径的依赖关系是什么。我认为另一个similar question 是因为写入websocket客户端的页面的位置更改而引发的。

2 个答案:

答案 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 );
}

希望这有助于下一次搜索...