一 概述
WebSocket是HTML5一种新的协议,它用来实现浏览器与服务器之间全双工通信(full-duplex)。一开始的握手需要借助于HTTP请求完成。WebSocket是真正实现了全双工通信的互联网技术。它是一种在单个TCP连接上进行全双工通讯协议。
二 全双工与单工的区别
- 全双工(Full Duplex)是通讯传输的一个术语。通信允许数据在两个方向上同时传输,它在能力上先当于两个单工通信方式的结合。全双工指可以同时(瞬间)进行信号的双向传输(A->B且B->A),指两个信息的发送时瞬时同步的。
- 单工,半双工(Half Duplex),半双工就是指一个时间段内只有一个动作发生。即同一瞬间(A->B,B->A)只能是一个发生,只有一个处理完后,下一个才开始。早期的对讲机以及早期集线器等设备均属于版半双工的产品。
三 http于websocket的区别
http协议是短连接(http1.1开始默认是长连接),所以请求之后,都会关闭连接,下次请求数据,就需要再次打开连接。
websocket是一种长连接,只需要通过一次请求来初始化连接,然后所有的请求和响应都是通过这个TCP连接进行通信。
注意:Tomcat服务器要Tomcat7.0.47+以上才支持websocket协议。
四 websocket相关注解说明
@ServerEndpoint("/websocket/{uid}")
- 申明这是一个websocket服务
- 需要指定访问该服务的地址,在地址中可以指定参数,需要通过{}进行占位
@OnOpen
- 用法:public void onOpen(Session session, @PathParam("uid") String uid) throws IOException{}
- 该方法将在建立连接后执行,会传入session对象,就是客户端与服务端建立的长连接通道
- 通过@PathParam获取url申明中的参数
@OnClose
- 用法:public void onClose() {}
- 该方法是在连接关闭后执行
@OnMessage
- 用法:public void onMessage(String message, Session session) throws IOException {}
- 该方法用于接收客户端发来的消息
- message:发来的消息数据
- session:会话对象(也是通道)
发送消息到客户端
- 用法:session.getBasicRemote().sendText("你好");
- 通过session进行发送。