Socket是TCP/IP网络的API,是为了方便使用TCP或UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口;而WebSocket则是一个典型的应用层协议。
WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信(full-duplex)。一开始的握手需要借助HTTP请求完成。
在Java中,提供了两个类用于实现TCP通信
Socket socket = new Socket("127.0.0.1",6666);
socket.getOutPutStream().write("hello");
ServerSocket ss = new ServerSocket(6666);
Socket server = ss.accept();
byte [] bytes=new byte[1024];
InputStream in = server.getInputStream();
int len = in.read(bytes);
String msg = new String(bytes,0,len);
HTTP协议从一开始被设计成请求/响应模式,所以要实现服务器主动推送到客户端只能用轮询的方式,实时性体验不够友好,而且资源也在消耗,不怎么友好。WebSocket服务一般只需要留意它的操作符即可
- 文本消息
- 二进制消息
- 分片消息(代表此消息是一个某个消息中的一部分)
- 连接关闭消息
- PING消息
- PONG消息(PING的回复就是PONG)
和 HTTP 相比,WS 至少有以下几个优点:
使用的资源更少:因为它的头更小。 实时性更强:服务端可以通过连接主动向客户端推送消息。 有状态:开启链接之后可以不用每次都携带状态信息。
对于Java来说,实现websocket大体上有4种方式
- SpringBoot-Web
- SpringBoot-WS
- netty-socketio
- netty
|