浅谈WebSocket及如何搭建实时聊天系统

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
注册配置 MSE Nacos/ZooKeeper,118元/月
函数计算FC,每月15万CU 3个月
简介: WebSocket 是一种在客户端和服务器之间提供全双工、双向通信的网络协议。它是基于TCP/IP协议栈的应用层协议,旨在实现浏览器与服务器之间的实时、低延迟且高效的长连接通信

一、浅谈WebSocket

WebSocket 是一种在客户端和服务器之间提供全双工、双向通信的网络协议。它是基于TCP/IP协议栈的应用层协议,旨在实现浏览器与服务器之间的实时、低延迟且高效的长连接通信。
基本概念:

  • 持久连接(Persistent Connection): WebSocket建立连接后会保持活跃状态,允许双方随时发送数据而无需每次请求都重新建立连接。
  • 全双工通信(Full-duplex Communication): 与传统的HTTP协议不同,WebSocket支持同时在客户端和服务器之间进行双向的数据传输,即两者都可以作为数据发起者。

工作原理:

  1. 握手阶段(Handshaking): 建立WebSocket连接之前,首先通过一个特殊的HTTP升级请求来协商协议升级。客户端在请求头中包含Upgrade: websocket字段,服务器响应同意升级后,连接从HTTP切换到WebSocket协议。
  2. 消息传输:一旦握手成功,WebSocket连接便处于开放状态,客户端和服务器可以互相发送帧(frame),其中包括文本或二进制数据。这种机制使得服务器可以主动推送更新,而不需要客户端轮询请求。

特点:

  • 低延迟:由于连接是持续打开的,减少了传统HTTP的请求-响应模式中的延迟和网络开销。
  • 减少带宽消耗:因为只需要一次握手,并且数据传输格式更紧凑,所以相比于频繁轮询或长轮询方式,WebSocket能更有效地使用网络资源。
  • 跨域支持:WebSocket像HTTP一样支持跨域访问,这使得开发者能够构建跨域的实时应用。
  • 事件驱动:客户端可以通过监听特定事件(如“open”、“message”、“close”等)来处理WebSocket连接的状态变化和接收到的数据。

应用场景:
WebSocket广泛应用于实时聊天系统、协同编辑工具、股票报价系统、在线游戏、物联网设备实时通讯等多种需要实时交互和信息推送的场景。
总之,WebSocket通过其独特的设计克服了传统HTTP协议在实现实时性、双向通信方面的局限性,极大地增强了Web应用程序的功能和用户体验。

二、实施聊天系统搭建步骤

1.创建WebSocket连接

客户端通过JavaScript代码创建WebSocket连接,指定服务器的WebSocket地址。

const socket = new WebSocket('ws://localhost:8080/chat');

2.监听连接状态

客户端需要监听WebSocket连接的状态,以便处理连接打开、关闭、错误等事件。

socket.addEventListener('open', function(event) {
   
  console.log('Connection opened');
});

socket.addEventListener('close', function(event) {
   
  console.log('Connection closed');
});

socket.addEventListener('error', function(event) {
   
  console.error('Error occurred:', event);
});

3.发生消息

当用户输入消息并点击发送按钮时,客户端将消息发送给服务器。

const sendMessageButton = document.getElementById('send-button');
sendMessageButton.addEventListener('click', function() {
   
  const messageInput = document.getElementById('message-input');
  const message = messageInput.value;
  socket.send(message);
  messageInput.value = '';
});

4.接收消息

服务器收到消息后,将其广播给所有连接的客户端。客户端监听来自服务器的消息,并将其显示在聊天窗口中。

socket.addEventListener('message', function(event) {
   
  const message = event.data;
  const chatLog = document.getElementById('chat-log');
  const newMessage = document.createElement('div');
  newMessage.textContent = message;
  chatLog.appendChild(newMessage);
});

5.实现服务器端逻辑

服务器端需要处理WebSocket连接的建立、消息的接收和广播等逻辑。可以使用支持WebSocket协议的服务器端技术,如Node.js的ws模块或Java的Jetty等。
以上是构建一个基本的WebSocket实时聊天系统的主要步骤。根据实际需求,还可以添加用户认证、消息加密、历史消息存储等功能。

相关文章
|
2月前
|
监控 前端开发 API
实战指南:使用Python Flask与WebSocket实现高效的前后端分离实时系统
【7月更文挑战第18天】构建实时Web应用,如聊天室,可借助Python的Flask和WebSocket。安装Flask及Flask-SocketIO库,创建Flask应用,处理WebSocket事件。前端模板通过Socket.IO库连接服务器,发送和接收消息。运行应用,实现实时通信。此示例展现了Flask结合WebSocket实现前后端实时交互的能力。
261 3
|
4月前
|
监控 JavaScript API
局域网监控软件的实时通知系统:利用Node.js和WebSocket实现即时消息推送
本文介绍了如何使用Node.js和WebSocket构建局域网监控软件的实时通知系统。实时通知对于网络安全和家庭监控至关重要,能即时发送监控数据变化的通知,提高响应速度。通过Node.js创建WebSocket服务器,当数据变化时,监控软件发送消息至服务器,服务器随即推送给客户端。此外,还展示了如何利用Node.js编写API,自动将监控数据提交到网站,便于用户查看历史记录,从而提升监控体验。
151 3
|
4月前
|
存储 监控 BI
HIS系统是什么?一套前后端分离云HIS系统源码 接口技术RESTful API + WebSocket + WebService
医院管理信息系统(全称为Hospital Information System)即HIS系统。 常规模版包括门诊管理、住院管理、药房管理、药库管理、院长查询、电子处方、物资管理、媒体管理等,为医院管理提供更有力的保障。 HIS系统以财务信息、病人信息和物资信息为主线,通过对信息的收集、存储、传递、统计、分析、综合查询、报表输出和信息共享,及时为医院领导及各部门管理人员提供全面、准确的各种数据。 门诊医生工作站采用下拉式汉化菜单,界面友好,实用性强,设有与门诊挂号收费系统、医技科室信息系统、住院结算信息系统的软件接口。
102 1
|
11月前
|
传感器 监控 测试技术
森林火灾预警系统 毕业设计 websocket+JAVA+Vue+SpringBoot+MySQL
森林火灾预警系统 毕业设计 websocket+JAVA+Vue+SpringBoot+MySQL
128 0
|
网络协议 BI
直播系统源码协议探索篇(二):网络套接字协议WebSocket
直播系统源码网络套接字协议WebSocket搭建参考代码 connected_clients.add(websocket) try: async for message in websocket: await broadcast(message) finally: connected_clients.remove(websocket)
直播系统源码协议探索篇(二):网络套接字协议WebSocket
|
12月前
|
JavaScript 前端开发 Java
SpringBoot+Vue搭建一个WebSocket的实时聊天室
SpringBoot+Vue搭建一个WebSocket的实时聊天室
204 0
|
Linux PHP Windows
BXA
|
监控 网络协议 JavaScript
Spring WebSocket构建实时交互系统
Spring WebSocket是基于WebSocket协议的一个开源框架,它使得开发人员可以更加方便地建立实时通信机制,以推送消息和数据并实时更新通信系统中的状态。Spring WebSocket被广泛应用于社交网站、电子商务、在线游戏等WEB应用程序中,以实现实时通信和即时响应。
BXA
162 0
|
移动开发 网络协议 前端开发
为美多商城(Django2.0.4)添加基于websocket的实时通信,主动推送,聊天室及客服系统
websocket是个啥? webSocket是一种在单个TCP连接上进行全双工通信的协议 webSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输
为美多商城(Django2.0.4)添加基于websocket的实时通信,主动推送,聊天室及客服系统
|
自然语言处理 NoSQL 安全
windows版gbc:基于enginx的组件服务器系统paas,可用于mixed web与websocket game
本文关键字:利用nginx实现paas,利用nginx实现组件化游戏引擎,(openresty)nginx+lua实现混合cs/bs一体化分布式架构
393 0
windows版gbc:基于enginx的组件服务器系统paas,可用于mixed web与websocket game