WebSocket简介
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
简而言之就是http协议只支持客户端(网页)请求,服务器响应,想要实现实时刷新数据就需要在JavaScript里定义定义轮询,每一段时间提交一次请求,服务器接收以后响应而实现实时刷新,但是这样特别浪费带宽和性能,一百个客户端就会有一百个死循环在持续请求
而websocket的出现很好的解决了这个问题,通过websocket协议可以实现服务器与客户端一次握手之后的长链接回话,实现了服务器主动推送消息给前台页面,从而替代了早期的网页轮询模式
说这么多其实websocket的用处很大,但是饭要一口一口吃,我们从一个小demo开始:
首先看一下效果:
左边的是eclipse编译器的控制台打印的消息,右边是网页显示
当项目在tomcat容器中运行的时候,访问localhost:8080/项目名/index页面的时候就会出现如图所示的网页
服务端连接成功会调用链接成功,支持多网页多链接访问,当客户端发送文字给服务器页面的时候,会打印在控制台上,服务器会将文字原封不动的返回回去,也就是echo回声.
实现环境:
tomcat8.5(版本必须大于7),JavaEE eclipse,jdk1.8
开始开发之前需要拷贝两个jar包,在tomcat lib 目录中有:
如图我选中的两个jar包:
实现步骤:
1.编写websocketconfig配置类,实现ServerApplicationConfig接口
package com.shenlan;
import java.util.Set;
import javax.websocket.Endpoint;
import javax.websocket.server.ServerApplicationConfig;
import javax.websocket.server.ServerEndpointConfig;
/**
* websocket核心配置类,会在tomcat加载的时候启动
* @author Oct.ca
*
*/
public class WebSocketConfig implements ServerApplicationConfig{
@Override
public Set<Class<?>> getAnnotatedEndpointClasses(Set<Class<?>> arg0) {
// TODO Auto-generated method stub
System.out.println("----------------------");
System.out.println("初始化加载的配置文件的个数 : "+arg0.size());
return arg0;
}
@Override
public Set<