由于传统HTTP协议主要是拉取消息,因此一些需要服务器主动推送消息的功能就难以实现,传统上是采用AJAX轮询、长轮询等方法;现在则可以采用webSocket来优雅地实现浏览器和服务器间的双向通信机制。
本demo主要实现了一个简单的聊天室,加入网页的游客可以一起聊天(消息广播)。服务端主要利用了spring的websocket模块,浏览器可以直接利用JS,两端都尽量采用较新的版本。
1、pom.xml依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-websocket</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-messaging</artifactId>
<version>4.2.5.RELEASE</version>
</dependency>
2、roomHandlerInterceptor握手接管器
当有新的握手连接请求时,可以自定义握手前后的一些处理动作。
package gensoku.myWebSocket;
import java.util.Map;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.socket.WebSocketHandler;
import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;
public class roomHandlerInterceptor extends HttpSessionHandshakeInterceptor
{
@Override
public boolean beforeHandshake(ServerHttpRequest req, ServerHttpResponse res,
WebSocketHandler handler, Map<String, Object> attr) throws Exception
{
System.out.println("Before handshake");
return super.beforeHandshake(req, res, handler, attr);
}
@Override
public void afterHandshake(ServerHttpRequest req