首页 > 其他分享 >WebSocket通信

WebSocket通信

时间:2024-11-11 10:18:38浏览次数:1  
标签:HTTP 通信 实时 服务器 WebSocket 连接 客户端

WebSocket通信

WebSocket 是一种全双工的通信协议,它允许在客户端和服务器之间建立持久的双向通信通道。与传统的 HTTP 协议不同,WebSocket 允许客户端和服务器之间实时传递数据,而无需频繁建立连接,从而减少了通信的开销和延迟。

WebSocket 的特点:

  1. 全双工通信:WebSocket 连接建立后,客户端和服务器都可以主动向对方发送消息,而不需要像 HTTP 那样由客户端发起请求,服务器被动响应。这样可以实现实时性强的应用,如在线聊天、实时更新等。
  2. 持久化连接:在 WebSocket 连接建立后,连接会一直保持,直到客户端或服务器主动关闭连接。这与传统 HTTP 的短连接模式(请求-响应模式)形成鲜明对比。
  3. 更少的开销:在初次连接时,WebSocket 通过 HTTP 协议进行握手,一旦连接建立,通信就不再使用 HTTP 的头信息,从而减少了网络开销。
  4. 低延迟:由于连接是持久的,客户端和服务器之间的通信延迟较低,特别适合对延迟敏感的应用场景,比如游戏、实时监控、股票行情推送等。

WebSocket 的工作流程:

  1. 建立连接:客户端发起 WebSocket 连接请求,通常是通过 HTTP 请求。服务器接收到请求后,如果支持 WebSocket,将进行协议升级,并通过 HTTP 响应建立 WebSocket 连接。
  2. 数据传输:连接建立后,客户端和服务器可以通过 WebSocket 发送数据。WebSocket 的数据传输采用帧(frame)方式,支持文本和二进制数据。
  3. 关闭连接:任意一方可以随时主动关闭连接,关闭后,通信将终止。

WebSocket 的应用场景:

  1. 即时通讯应用:如在线聊天室、即时消息应用等,客户端和服务器需要实时交换消息。
  2. 实时数据推送:如股票行情、新闻推送、体育赛事直播等,服务器需要将实时数据推送给客户端。
  3. 在线游戏:多人在线游戏中,客户端和服务器之间需要实时同步游戏状态和操作。
  4. 物联网(IoT):设备和服务器之间的实时通信,传感器数据的实时上传和处理。

与传统 HTTP 长轮询的对比:

  • 效率:WebSocket 连接建立后可以一直保持,而 HTTP 长轮询需要频繁建立和关闭连接,因此 WebSocket 的通信效率更高。
  • 实时性:WebSocket 是双向实时通信,长轮询则是客户端定期请求服务器,存在一定的延迟。
  • 开销:WebSocket 的数据传输过程中没有 HTTP 头部信息,而长轮询每次请求都会带有 HTTP 头部,导致开销较大。

WebSocket 的限制:

  • 防火墙和代理:由于 WebSocket 需要保持长连接,某些防火墙和代理可能会阻断或限制 WebSocket 连接。
  • 复杂性:与传统 HTTP 请求-响应模型相比,WebSocket 的开发和调试更为复杂。

WebSocket 示例:

客户端代码(JavaScript):

// 创建 WebSocket 连接
const socket = new WebSocket('ws://localhost:8080/ws');

// 连接建立时触发
socket.onopen = function(event) {
    console.log('WebSocket connection established');
    socket.send('Hello Server!');
};

// 收到消息时触发
socket.onmessage = function(event) {
    console.log('Received from server: ' + event.data);
};

// 连接关闭时触发
socket.onclose = function(event) {
    console.log('WebSocket connection closed');
};

// 发生错误时触发
socket.onerror = function(event) {
    console.error('WebSocket error: ' + event.message);
};

服务器代码(Spring WebSocket 处理):

public class MyWebSocketHandler extends TextWebSocketHandler {

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
        System.out.println("连接建立: " + session.getId());
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
        System.out.println("收到消息: " + message.getPayload());
        session.sendMessage(new TextMessage("Echo: " + message.getPayload()));
    }

    @Override
    public void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {
        System.out.println("连接关闭: " + session.getId());
    }
}

总结:

WebSocket 提供了一种高效的双向通信方式,适用于需要实时交互的应用场景。它的优势在于低延迟、低开销和高实时性,但也有一定的复杂性和环境限制。在实际应用中,可以根据具体需求选择是否使用 WebSock###et。

项目地址

https://gitee.com/lxj_dear/my-web-socket

标签:HTTP,通信,实时,服务器,WebSocket,连接,客户端
From: https://www.cnblogs.com/20lxj666/p/18406311

相关文章

  • 语义通信论文略读(七)Contrastive Learning-Based Semantic Communications
    ContrastiveLearning-BasedSemanticCommunications基于对比学习的语义通信·作者:ShunpuTang,QianqianYang,LishengFan,XianfuLei,ArumugamNallanathan,GeorgeK.Karagiannidis·所属机构:广州大学计算机科学与网络安全学院,浙江大学信息科学与电子工程......
  • 精选2款C#/.NET开源且功能强大的网络通信框架
    思维导航前言NetCoreServerTouchSocket优秀项目和框架精选DotNetGuide技术社区前言今天大姚给分享2个C#/.NET开源且功能强大的网络通信框架,希望可以帮助到有需要的同学。NetCoreServerNetCoreServer是一个.NET开源、免费(MITLicense)、快速、低延迟的异步套接字服......
  • OpenMV与STM32之间的通信(附源码)
    在嵌入式项目中,经常需要将图像处理单元(如OpenMV)与微控制器(如STM32)相结合,以实现更复杂的功能。本文将详细介绍如何通过串口通信实现OpenMV与STM32之间的数据传输。OpenMV与STM32通信基础OpenMV是一款专为机器视觉设计的微控制器,它内置了图像传感器和强大的图像处理算法。ST......
  • 2024年(2025届)四非电子通信保研推免经历(北邮、西电、西工大、天大等)
    前言写下这篇博客的原因在于自己保研期间刷了很多很多的经验贴,保研过程中充满了大量的信息差,一路走来听了很多学长学姐讲述了自己的经历,感觉收获颇丰。所以希望能将自己的经历也分享下去,如果以后的学弟学妹能获得一点点帮助,那就再好不过了。一、保研黑话rk:绩点/均分/综测的......
  • 第四届智能系统、通信与计算机网络国际学术会议(ISCCN 2025) 2025 4th International C
    @目录一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题一、会议详情二、重要信息大会官网:https://ais.cn/u/vEbMBz三、大会介绍第四届智能系统、通信与计算机网络国际学术会议(ISCCN2025)将于2025年2月21-23日在中国南宁隆重召开。会议旨在将“智能系统”“......
  • Pyhthon实时行情接口WebSocket接入
    Python做量化,如果是日内策略,需要更实时的行情数据,不然策略滑点太大,容易跑偏结果。之前用行情网站提供的level1行情接口,实测平均更新延迟达到了6秒,超过10只股票并发请求频率过快很容易封IP。后面又尝试了买代理IP来请求,成本太高而且不稳定。在Github上看到一个可转债的Golang高频......
  • 精选2款C#/.NET开源且功能强大的网络通信框架
    前言今天大姚给分享2个C#/.NET开源且功能强大的网络通信框架,希望可以帮助到有需要的同学。NetCoreServerNetCoreServer是一个.NET开源、免费(MITLicense)、快速、低延迟的异步套接字服务器和客户端库。它支持多种协议,包括TCP、SSL、UDP、UnixDomainSocket、HTTP、HTTPS和We......
  • 【网络】套接字编程——UDP通信
    >作者:დ旧言~>座右铭:松树千年终是朽,槿花一日自为荣。>目标:UDP网络服务器简单模拟实现。>毒鸡汤:有些事情,总是不明白,所以我不会坚持。早安!>专栏选自:网络>望小伙伴们点赞......
  • Kafka - 启用安全通信和认证机制_SSL + SASL
    文章目录官方资料概述制作kakfa证书1.1openssl生成CA1.2生成server端秘钥对以及证书仓库1.3CA签名证书1.4服务端秘钥库导入签名证书以及CA根证书1.5生成服务端信任库并导入CA根数据1.6生成客户端信任库并导入CA根证书2配置zookeeperSASL认证2.1编写zk_server......
  • (JAVA)基于TCP通信多人聊天系统
    一、目标 这个项目是一个基于TCP协议的简单多人聊天系统,包含一个服务器和多个客户端。服务器接受多个客户端的连接,每个客户端发送的消息都可以转发给其他所有在线的客户端,实现了一个基本的多人实时聊天功能。项目使用Java编程语言编写,利用ServerSocket和Socket 创建......