WebSocket 服务端WebSocket 在服务端的实现非常丰富。Node.js、Java、C++、Python 等多种语言都有自己的解决方案。
以下,介绍我在学习 WebSocket 过程中接触过的 WebSocket 服务端解决方案。
Node.js常用的 Node 实现有以下三种。
JavaJava 的 web 一般都依托于 servlet 容器。
我使用过的 servlet 容器有:Tomcat、Jetty、Resin。其中Tomcat7、Jetty7及以上版本均开始支持 WebSocket(推荐较新的版本,因为随着版本的更迭,对 WebSocket 的支持可能有变更)。
此外,Spring 框架对 WebSocket 也提供了支持。
虽然,以上应用对于 WebSocket 都有各自的实现。但是,它们都遵循 的通信标准,并且 Java API 统一遵循 规范。所以,在实际编码中,API 差异不大。
SpringSpring 对于 WebSocket 的支持基于下面的 jar 包:
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> <version>${spring.version}</version></dependency>
在 Spring 实现 WebSocket 服务器大概分为以下几步:
创建 WebSocket 处理器
扩展 TextWebSocketHandler 或 BinaryWebSocketHandler ,你可以覆写指定的方法。Spring 在收到 WebSocket 事件时,会自动调用事件对应的方法。
[url=][/url]
import org.springframework.web.socket.WebSocketHandler;import org.springframework.web.socket.WebSocketSession;import org.springframework.web.socket.TextMessage;public class MyHandler extends TextWebSocketHandler { @Override public void handleTextMessage(WebSocketSession session, TextMessage message) { // ... }}[url=][/url]
WebSocketHandler 源码如下,这意味着你的处理器大概可以处理哪些 WebSocket 事件:
[url=][/url]
public interface WebSocketHandler { /** * 建立连接后触发的回调 */ void afterConnectionEstablished(WebSocketSession session) throws Exception; /** * 收到消息时触发的回调 */ void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception; /** * 传输消息出错时触发的回调 */ void handleTransportError(WebSocketSession session, Throwable exception) throws Exception; /** * 断开连接后触发的回调 */ void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception; /** * 是否处理分片消息 */ boolean supportsPartialMessages();}[url=][/url] |