赞
踩
WebSocket是一种在单个TCP连接上进行全双工通信的协议,其设计的目的是在Web浏览器和Web服务器之间进行实时通信(实时Web)。
WebSocket协议的优点包括:
1. 更高效的网络利用率:与HTTP相比,WebSocket的握手只需要一次,之后客户端和服务器端可以直接交换数据;
2. 实时性更高:WebSocket的双向通信能够实现实时通信,无需等待客户端或服务器端的响应;
3. 更少的通信量和延迟:WebSocket可以发送二进制数据,而HTTP只能发送文本数据,并且WebSocket的消息头比HTTP更小。
简单使用示例:
1. 客户端JavaScript代码:
- ```javascript
- //创建WebSocket对象
- var socket = new WebSocket("ws://localhost:8080/");
-
- //建立连接后回调函数
- socket.onopen = function(event) {
- console.log("WebSocket连接建立成功");
- };
-
- //接收到消息后回调函数
- socket.onmessage = function(event) {
- console.log("接收到消息:" + event.data);
- };
-
- //错误回调函数
- socket.onerror = function(event) {
- console.log("WebSocket连接发生错误");
- };
-
- //关闭回调函数
- socket.onclose = function(event) {
- console.log("WebSocket连接关闭");
- };
-
- //发送消息
- socket.send("hello server");
2. 服务器端Java代码:
- ```java
- import java.io.IOException;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.util.HashSet;
- import java.util.Set;
-
- public class WebSocketServer {
-
- //存储所有连接到服务器的WebSocket对象
- private static Set<WebSocket> webSockets = new HashSet<>();
-
- public static void main(String[] args) throws IOException {
- //创建ServerSocket
- ServerSocket serverSocket = new ServerSocket(8080);
- System.out.println("服务器已启动,监听端口:8080");
-
- //循环等待客户端连接
- while (true) {
- //创建Socket对象
- Socket socket = serverSocket.accept();
-
- //创建WebSocket对象,存储到集合中
- WebSocket webSocket = new WebSocket(socket);
- webSockets.add(webSocket);
-
- //启动线程,处理该WebSocket连接
- new Thread(webSocket).start();
- System.out.println("客户端已连接:" + socket.getInetAddress().getHostAddress());
- }
- }
-
- //广播消息给所有连接到服务器的WebSocket对象
- public static void broadcast(String message) {
- for (WebSocket webSocket : webSockets) {
- try {
- webSocket.sendMessage(message);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
3. 服务器端WebSocket代码:
- ```java
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.Socket;
-
- public class WebSocket implements Runnable {
-
- private Socket socket;
- private InputStream inputStream;
-
- public WebSocket(Socket socket) throws IOException {
- this.socket = socket;
- this.inputStream = socket.getInputStream();
- }
-
- //接收消息
- public String receiveMessage() throws IOException {
- byte[] buffer = new byte[1024];
- int len = inputStream.read(buffer);
- return new String(buffer, 0, len);
- }
-
- //发送消息
- public void sendMessage(String message) throws IOException {
- socket.getOutputStream().write(message.getBytes());
- }
-
- @Override
- public void run() {
- try {
- while (true) {
- String message = receiveMessage();
- System.out.println("接收到消息:" + message);
- WebSocketServer.broadcast(message);
- }
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- socket.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。