spring4 + WebSocket笔记 [含源码]

WebSocket是HTML5的重要组成部分,据说能有诸多好处。所以花了点时间研究了一下这个东东,看看这货是何方妖孽,有何神通,能不能为我所用。

我试着下载了spring官方的demo (地址:https://github.com/rstoyanchev/spring-websocket-test)
跑起来看到里面有点小bug,自己修改了一下,顺便阅读修改并注释了主要代码。修改后的源码在:
http://git.oschina.net/sybn/webSocketDemo.git

在这里零散的记录一下收获和感想,以后继续补充完善。

首先,spring4的这个demo已经完全没有xml配置文件了,连web.xml都木有了,这是spring的一个推荐风格。不习惯的话继续使用原先的spring.xml配置文件形式来定义配置也可以的。demo里用了一点spring Security 的东西,简单的多了一点访问权限控制。

WebSocket这边,可以看到demo里准备了很多通道,这些通道用来使客户端和服务器互相推送消息。
客户端向服务器的推送比较好理解,和传统的http模式比较类似,

我们可以给原本的Controller稍微加点料即可实现。
@Controller
public class GreetingController {
	@RequestMapping(value=”/greeting”, method=POST)
	public void httpGreet(String text) {
	// ...
	}
	@MessageMapping("/greeting")
	public void stompGreet(String text) {
	// ...
	}
}

服务器向客户端推动则有点像jms的感觉:
this.messagingTemplate.convertAndSend("/topic/price.stock." + quote.getTicker(), quote);

这里的convertAndSend发送的消息是广播消息,所有侦听/topic/price.stock.*的客户端都能收到消息。


猜想:
简单猜想了一下WebSocket可以出手的地方。
我们使用ext时,如果使用WebSocket代替ajax做数据代理的实现,当一个人修改了数据时,另一个人就可以立刻收到新版数据的推送,减少脏数据出现的频率。当然,只是减少。


疑问:
暂时还没研究这个流程的安全性,未经授权的侦听是否被spring Security阻挡住。
目前发现,如果客户端重启,客户端能正常的重新连接上服务器,但是反之不行,看来demo中没有做侧问题的容错处理。暂时没研究其他网络环境变化的影响。(例如代理)
demo中准备的降级策略,如果浏览器不支持WebSocket,会自动使用替代方案,我们无需对此过程做任何额外配置,经测试UC可以正常访问者个domo。
暂时还没有具体研究WebSocket的性能表现,那些时候WebSocket的表现优于传统http方案还不清楚,没有具体的数据对比之前,木有数据就木有发言权啊。


参考文档
http://www.oschina.net/translate/websocket-architecture-in-spring-4-0
1http://www.iteye.com/news/27808-springframework-websocket

                
Spring-Boot WebSocket 可以实现向日葵远程控制。向日葵是一款远程控制软件,可以让我们在远程控制设备时更加方便和灵活。在使用Spring-Boot实现WebSocket时,我们可以结合向日葵的API来达到远程控制的目的。 首先,在Spring-Boot中,我们需要引入WebSocket的依赖。可以在pom.xml文件中添加相应的依赖,例如: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> ``` 然后,我们需要创建WebSocket的配置类。在配置类中,我们可以定义WebSocket的相关设置,例如消息处理器、握手拦截器等。可以参考以下代码: ``` @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(myHandler(), "/myHandler").withSockJS(); } @Bean public WebSocketHandler myHandler() { return new MyHandler(); } } ``` 在以上代码中,`registerWebSocketHandlers` 方法用来注册WebSocket处理器,并指定了处理路径。`MyHandler` 是自定义的消息处理器,可以在其中处理接收到的消息、发送消息等。 接下来,我们可以在处理器中调用向日葵的API,实现远程控制的功能。例如: ``` public class MyHandler extends TextWebSocketHandler { @Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { // 处理接收到的消息 String receivedMessage = message.getPayload(); // 调用向日葵API,实现远程控制 // 发送消息 String responseMessage = "远程控制成功"; session.sendMessage(new TextMessage(responseMessage)); } } ``` 在以上代码中,`handleTextMessage` 方法用来处理接收到的消息。我们可以在其中调用向日葵的API实现远程控制的逻辑,并将结果作为消息发送回客户端。 最后,在Spring-Boot的主类中添加 `@EnableWebSocket` 注解,启用WebSocket功能。 综上所述,通过Spring-Boot WebSocket,我们可以便捷地实现向日葵远程控制的功能。使用WebSocket协议进行通信,同时结合向日葵的API,可以让我们更加灵活地远程控制设备。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值