WebSocket介绍及部署

简介: WebSocket介绍及部署

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();
            }
        }
    }
}
相关文章
|
前端开发 JavaScript Java
websocket部署后在谷歌内核浏览器异常断开问题
后端springboot前端vue开发的网页,利用websocket实现操作数据库前端网页实时刷新的功能
websocket部署后在谷歌内核浏览器异常断开问题
|
JavaScript 前端开发 NoSQL
前后端分离 Vue + Egg.js + Mysql 的 JS全栈实践。动态菜单,RBAC权限模型,WebSocket实现站内信。已部署到线上!!!
🖖基于Vue+Egg.js的JS全栈项目。动态菜单,RBAC权限模型,Websocket实现站内信。
594 0
前后端分离 Vue + Egg.js + Mysql 的 JS全栈实践。动态菜单,RBAC权限模型,WebSocket实现站内信。已部署到线上!!!
|
容器 Cloud Native
如何在 Knative 中部署 WebSocket 和 gRPC 服务?
作者 | 冬岛  阿里云容器平台工程师 导读:虽然说 Knative 默认就支持 WebSocket 和 gRPC,但在使用中会发现,有时想要把自己的 WebSocket 或 gRPC 部署到 Knative 中,还是存在各种不顺利。
11655 0
|
网络协议 前端开发 安全
websocket和http的瓜葛以及websocket协议实现
websocket和http的瓜葛以及websocket协议实现
websocket和http的瓜葛以及websocket协议实现
|
JavaScript
js实现websocket实例
js实现websocket实例
195 0
|
消息中间件 网络协议 前端开发
SpringBoot轻松整合WebSocket,实现Web在线聊天室
前面为大家讲述了 Spring Boot的整合Redis、RabbitMQ、Elasticsearch等各种框架组件;随着移动互联网的发展,服务端消息数据推送已经是一个非常重要、非常普遍的基础功能。今天就和大家聊聊在SpringBoot轻松整合WebSocket,实现Web在线聊天室,希望能对大家有所帮助。
SpringBoot轻松整合WebSocket,实现Web在线聊天室
|
网络协议 Linux 网络安全
php实现websocket实时消息推送
php实现websocket实时消息推送
425 0
php实现websocket实时消息推送
|
JavaScript 前端开发 Python
Python编程:tornado实现WebSocket通讯
以下实例有点像广播通讯,支持多个客户端连接 代码参考别人的,稍微做了一点点修改 服务器端 websocket_demo.py
98 0
Python编程:tornado实现WebSocket通讯
|
消息中间件 NoSQL 前端开发
通过WebSocket实现日志打印功能
通过WebSocket实现日志打印功能
681 0
通过WebSocket实现日志打印功能
|
网络协议 安全 Java
用Netty实现WebSocket网络聊天室
用Netty实现WebSocket网络聊天室
166 0
用Netty实现WebSocket网络聊天室