您的位置:首页 > 运维架构 > Tomcat

服务器推送之WebSocket 入门学习路程(四) 中结

2016-07-08 18:15 639 查看
【小结2】

经过前面的这些坑,虽然看起来不多,但是别忘了,这些坑也是总结出来的,不总结的时候,谁知道是几个坑啊

【Step 6: 写高级的代码】

在弄stomp之前,强烈建议 大家看看stomp的知识,不才孤陋寡闻,以为stomp是spring支持websocket才出的东西,其实不然,这东西早就有,不看的话有些概念弄不清。

在这之前读文档的时候 就说了一个坑, 这个stomp的用法和前面的东西是分开的,不能混在一起写,是另一种实现方式。//巨大隐形坑-7

客户端:

//这是新的写法了,和之前的都不一样
var socket = new SockJS('http://mydomain/myweb/rest/<em>portfolio</em>');//见巨坑-9

<pre name="code" class="javascript">var client = Stomp.over(socket);
client.connect({},function(){
console.log("stomp is connected");

client.subscribe("/topic/custom", function(message){//<span style="color:#FF0000;">坑-8:</span>写在connect里面; <span style="color:#FF0000;">坑-11</span>:custom随便写的就是为了和后面发送消息时对应,没有别的含义:
if (message.body) {
alert("got message with body " + message.body);
} else {
alert("got empty message");
}
}, {});
});




服务端:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {//是的,和之前完全不一样了,这就是那个<span style="color:#FF0000;">巨大隐形坑-7</span>

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/portfolio").setAllowedOrigins("*").withSockJS();
//这个portfolio是干嘛的,跳到哪?
//这个东西就在这出现和前面对应,不跳到哪,不要在服务端找这个东西,除了这就没有别得地方有,<em>只是用来建立websocket链接的一个标志</em><span style="color:#FF0000;"></span>:<span style="color:#FF0000;">巨坑-9</span>
registry.addEndpoint("/portfolio/info").setAllowedOrigins("*").withSockJS();//这个info参照之前的坑
}

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app");//所有发送消息的地方加前缀app
registry.enableSimpleBroker("/topic");//这个东西叫主题,广播用的,就类似前面为了解决广播问题专门加的那一堆代码
}

@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> arg0) {
// TODO Auto-generated method stub
}

@Override
public void addReturnValueHandlers(List<HandlerMethodReturnValueHandler> arg0) {
// TODO Auto-generated method stub

}

@Override
public void configureClientInboundChannel(ChannelRegistration arg0) {
// TODO Auto-generated method stub

}

@Override
public void configureClientOutboundChannel(ChannelRegistration arg0) {
// TODO Auto-generated method stub

}

@Override
public boolean configureMessageConverters(List<MessageConverter> arg0) {
// TODO Auto-generated method stub
return true;//小坑一个,默认的位false:<span style="color:#FF0000;">坑-10</span>
}

@Override
public void configureWebSocketTransport(WebSocketTransportRegistration arg0) {
// TODO Auto-generated method stub

}

}

//自己的业务类
@Controller
public class ServiceBean {
    
    private SimpMessagingTemplate template;
    
    @Autowired
    public ServiceBean (SimpMessagingTemplate template) {
        this.template = template;
    }

@RequestMapping("/do")
    public String do(){
//在处理完业务后,通知客户端
this.template.convertAndSend("/topic/custom", "发送的消息");//custom和<span style="color:#FF0000;">坑-11</span>对应
}
}


好啦,又经过了一些坑,总算搞定了,但是其中还有很多不明白的东西,希望有懂的大神,给说说,或者给个链接瞧瞧。

除此之外,spring在stomp上面还提供很多功能,都没研究,慢慢来。

欢迎大家指正。

【中结】

还是那句话,不知道是官网文档有问题,还是我理解有问题,总是感觉坑很多。

看官方文档需谨慎啊。

但是不甘心总是看别人的东西,总看别人的东西哪里来的原创。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java spring tomcat websocket