java服务器开发教程 再谈websocket论架构设计(8)

电脑杂谈  发布时间:2018-02-21 00:52:48  来源:网络整理

这样便建立了连接。 后续的其他操作就可以通过stompClient句柄进行使用了。

通讯层设计 – spring websocket消息模型

见模型图:

java服务器开发_java服务器开发教程_java服务器教程推荐

message-flow-simple-broker

可以看出对于同一定于目标都为:/topic/broadcast,它的发送渠道为两种:/app/broadcast和/topic/broadcast

如果为/topic/broadcast,直接可将消息体发送给定于目标(/topic/broadcast)。

如果是/app/broadcast,它将消息对应在MessageHandler方法中进行处理,处理后的结果发放到broker channel中,最后再讲消息体发送给目标(/topic/broadcast)

当然,这里边所说的app前缀就是刚才我们在websocket配置中的前缀.

看一个例子:

前端订阅:

stompClient.subscribe(/topic/broadcast, function(greeting){
    showGreeting(greeting.body);
});

后端服务:

@Controller
public class ChatWebSocket extends AbstractWebSocket{
 @MessageMapping("broadcast")
 public String broadcast(@Payload @Validated Message message, Principal principal) {
     return "发送人: " + principal.getName() + " 内容: " + message.toString();
 }
}

@Data
public class Message {
    @NotNull(message = "标题不能为空")
    private String title;
    private String content;
}

前端发送:

function sendBroadcast() {
    stompClient.send("/app/broadcast",{},JSON.stringify({content:message content}));
}

这种发送将消息发送给后端带有@MessageMapping注解的方法,然后组合完数据以后,在推送给订阅/topic/broadcast的前端

function sendBroadcast() {
    stompClient.send("/topic/broadcast",{},JSON.stringify({content:message content}));
}

这种发送直接将消息发送给订阅/topic/broadcast的前端,并不通过注解方法进行流转。

我相信上述这个理解已经解释清楚了spring websocket的消息模型图

通讯层设计 – @MessageMapping

带有这个注解的@Controller下的方法,正是对应websocket中的中转数据的处理方法。

那么这个注解下的方法究竟可以获取哪些数据,其中有什么原理呢?


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-86444-8.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...