websocket学习总结
一、前后端常用通讯方式
1. ajax
浏览器发起请求,服务器返回数据,服务器不能主动返回数据,要实现实时数据交互只能是ajax轮询(让浏览器隔个几秒就发送一次请求,然后更新客户端显示。这种方式实际上浪费了大量流量并且对服务端造成了很大压力)。
2. websocket
websocket是HTML5出的东西(协议),是一种全双工通信机制,两端可以及时地互发事件,互发数据,相互通信,只需要浏览器和服务器建立一次连接,服务器就可以主动推送数据到浏览器实现实时数据更新。
原生 websocket 支持到IE11 ,实际开发中,有比较著名的两个库socket.io(英文版、中文版可能跟新不及时) 和 sockjs , 它们都对原始的API做了进一步封装和兼容IE,提供了更多功能,都分为客户端和服务端的实现,实际应用中,可以选择使用。
websocket 的实现需要后端搭建一个WebSocket服务器。
websocket最好用在实时更新的业务场景中,解决ajax long polling长轮询问题。如果一次请求就能得到想要的数据信息业务,还是使用ajax来解决,此时如果使用websocket相当于一直浪费着服务器的资源。
二、有两种websocket包可以集成在项目中,方便引入websocket机制:
1、java_websocket.jar :从底层集成,需要手动创建 WebSocketServer类并开启(调用start方法)
2、websocket-api.jar :使用ServerEndpoint注解,value参数指定了ws访问的路径
例如:
使用@ServerEndpoint(value="/websocket/connectServer") 来标识一个websocketserver类
ws访问这个websocketserver的路径为:ws://服务器IP:tomcat端口/项目名/websocket/connectServer