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

【小结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上面还提供很多功能,都没研究,慢慢来。


欢迎大家指正。


【中结】

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

看官方文档需谨慎啊。

但是不甘心总是看别人的东西,总看别人的东西哪里来的原创。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值