WebSocket技术是一种基于TCP/IP协议的通信协议,用于在Web浏览器和Web服务器之间进行双向通信。它提供了一种用于创建和管理WebSocket连接的API,可以通过该连接发送和接收数据。与HTTP协议相比,WebSocket协议具有许多优点.
在建立WebSocket连接之前,首先需要通过HTTP协议进行握手,这个过程称为”握手协议”。在握手协议过程中,客户端向服务器发送WebSocket协议的请求,并等待服务器的响应。如果服务器同意建立WebSocket连接,则返回一个101状态码。一旦连接建立,WebSocket客户端和服务器之间就可以通过该连接进行双向通信。
在建立WebSocket连接之后,客户端和服务器之间的通信是全双工的,这意味着两端都可以随时主动发送和接收数据。在WebSocket协议中,数据是通过”帧”的形式进行传输的。帧包括了一些控制信息和数据,用于在连接上发送和接收消息。与HTTP协议相比,WebSocket的控制开销较少,延迟较低,实时性更强,并且可以保持连接状态.
总之,WebSocket技术是一种在Web浏览器和Web服务器之间进行双向通信的协议,具有较少的控制开销、更强的实时性、保持连接状态和更好的二进制支持等优点。在建立WebSocket连接之前,需要通过HTTP协议进行握手协议,然后才能建立WebSocket连接进行双向通信.
JavaScript 示例:
// 创建 WebSocket 对象
const ws = new WebSocket('wss://example.com/socket');
// 在连接成功时触发
ws.onopen = () => {
console.log('WebSocket 连接成功');
// 向服务器发送数据
ws.send('Hello, Server!');
};
// 在接收到服务器数据时触发
ws.onmessage = (event) => {
console.log(`服务器返回:${event.data}`);
};
// 在连接关闭时触发
ws.onclose = () => {
console.log('WebSocket 连接关闭');
};
上面的示例使用 new WebSocket() 创建了一个 WebSocket 对象,连接到了服务器上的 /socket 路径。在连接成功后,使用 ws.send() 向服务器发送数据。在接收到服务器返回的数据时,触发了 ws.onmessage 回调函数,将数据输出到控制台上。在连接关闭时,触发了 ws.onclose 回调函数,输出连接关闭的消息。
Java 示例:
@ServerEndpoint("/socket")
public class MyWebSocket {
// 在连接建立时触发
@OnOpen
public void onOpen(Session session) {
System.out.println("WebSocket 连接成功");
// 向客户端发送消息
session.getBasicRemote().sendText("Hello, Client!");
}
// 在接收到客户端消息时触发
@OnMessage
public void onMessage(String message, Session session) {
System.out.println("客户端发送的消息:" + message);
// 向客户端回复消息
try {
session.getBasicRemote().sendText("I received your message: " + message);
} catch (IOException e) {
e.printStackTrace();
}
}
// 在连接关闭时触发
@OnClose
public void onClose() {
System.out.println("WebSocket 连接关闭");
}
}
上面的示例使用 Java 中的 @ServerEndpoint 注解将一个 POJO 类转换为 WebSocket 服务器。在连接建立时,触发了 @OnOpen 注解标记的方法,向客户端发送了一条消息。在接收到客户端发送的消息时,触发了 @OnMessage 注解标记的方法,将消息输出到控制台并回复一条消息。在连接关闭时,触发了 @OnClose 注解标记的方法,输出连接关闭的消息。
需要注意的是,Java 的 WebSocket 代码需要运行在 WebSocket 服务器上才能正常工作,比如 Tomcat、Jetty 等 。