美文网首页
初识websocket

初识websocket

作者: vincent_z | 来源:发表于2023-09-26 16:07 被阅读0次
from_researchgate.png

WebSocket是什么

WebSocket是一种在Web应用程序中实现实时双向通信的协议,它允许服务器主动向客户端推送数据,并且客户端也可以向服务器发送数据,实现了真正的双向通信。与传统的HTTP请求相比,WebSocket减少了通信的开销,节省了带宽,并且能够实时传输数据,无需客户端频繁地发起请求。

WebSocket的工作原理

WebSocket协议基于TCP连接,与HTTP协议不同的是,WebSocket在建立连接后会保持持久连接,通过握手协议和帧的形式进行数据传输。以下是WebSocket的基本工作流程:

  1. 客户端发起WebSocket连接请求,请求头中包含Upgrade字段,值为"websocket",以及其他必要的参数。以下展示了如何使用Node.js处理WebSocket握手请求:
const http = require('http');

const server = http.createServer((req, res) => {
  if (req.headers.upgrade && req.headers.upgrade.toLowerCase() === 'websocket') {
    // 处理WebSocket握手
    // ...
    // 这里可以编写进一步处理WebSocket握手的代码
  } else {
    // 处理其他HTTP请求
    res.statusCode = 404;
    res.end();
  }
});

server.listen(8080, () => {
  console.log('HTTP服务器已启动');
});
  1. 服务器响应连接请求,返回101状态码和Upgrade字段,表示成功切换到WebSocket协议。以下展示了如何使用Node.js响应WebSocket连接请求:
const http = require('http');

const server = http.createServer((req, res) => {
  if (req.headers.upgrade && req.headers.upgrade.toLowerCase() === 'websocket') {
    // 处理WebSocket握手
    res.writeHead(101, {
      'Upgrade': 'websocket',
      'Connection': 'Upgrade',
      // 这里可以添加其他必要的响应头部
    });
    res.end();

    // 在此之后,可以继续处理WebSocket连接
    // ...
  } else {
    // 处理其他HTTP请求
    res.statusCode = 404;
    res.end();
  }
});

server.listen(8080, () => {
  console.log('HTTP服务器已启动');
});
  1. 建立WebSocket连接后,客户端和服务器可以通过发送帧来进行实时通信。帧由标识符、数据长度和数据组成,可以是文本或二进制数据。

  2. 双方可以随时发送帧,服务器可以主动向客户端推送数据,客户端也可以向服务器发送数据。

  3. 当通信结束或需要关闭连接时,可以发送特定的帧进行关闭握手,双方完成关闭操作后断开连接。

前端如何使用

如何在JavaScript中使用WebSocket与服务器进行实时通信。

// 创建WebSocket连接
var socket = new WebSocket('ws://example.com/socket');

// 连接成功时的回调函数
socket.onopen = function () {
  console.log('WebSocket连接已建立');
  
  // 向服务器发送数据
  socket.send('Hello, Server!');
};

// 接收到服务器发送的数据时的回调函数
socket.onmessage = function (event) {
  console.log('收到服务器的消息:', event.data);
};

// 连接关闭时的回调函数
socket.onclose = function () {
  console.log('WebSocket连接已关闭');
};

// 发生错误时的回调函数
socket.onerror = function (error) {
  console.error('WebSocket发生错误:', error);
};

在上述示例中,我们首先创建了一个WebSocket对象,将服务器的WebSocket地址作为参数传递给构造函数。然后,我们定义了几个回调函数,分别处理连接建立、接收消息、连接关闭和错误等事件。在连接建立后,我们可以使用socket.send方法向服务器发送数据,服务器发送的消息将通过socket.onmessage回调函数接收。

后端如何响应

如何使用node.js在后端监听和处理WebSocket连接。

const WebSocket = require('ws');

// 创建WebSocket服务器
const wss = new WebSocket.Server({ port: 8080 });

// 监听WebSocket连接事件
wss.on('connection', function (ws) {
  console.log('WebSocket连接已建立');

  // 监听消息接收事件
  ws.on('message', function (message) {
    console.log('收到客户端的消息:', message);

    // 向客户端发送消息
    ws.send('Hello, Client!');
  });

  // 监听连接关闭事件
  ws.on('close', function () {
    console.log('WebSocket连接已关闭');
  });

  // 发生错误时的处理
  ws.on('error', function (error) {
    console.error('WebSocket发生错误:', error);
  });
});

写在最后

通过WebSocket,服务器可以主动向客户端推送数据,而无需客户端频繁地发起请求。本文入门级地介绍了WebSocket的基本概念和工作原理,在实际应用中,建议使用成熟的WebSocket库,如Socket.io或Werkzeug等,以简化开发过程并提供更多功能。保持学习,共勉~

相关文章

  • 初识websocket

    一、定义 WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duple...

  • 初识WebSocket

    什么是WebSocket WebSocket 是一种在单个TCP连接上进行全双工通讯的协议,属于应用层协议。它基于...

  • 初识websocket

    前言:工作中在验证前端页面展示数据时,接触到websocket这一概念,这里粗略记录下关于websocket的理解...

  • 初识WebSocket

    WebSocket一种网络通信协议。很多高级的功能都需要ta。转自:阮一峰的websocket教程[http://...

  • WebSocket初识及练习

    什么是WebSocket? WebSocket 是一种网络通信协议。RFC6455 定义了它的通信标准。 WebS...

  • WebSocket

    WebSocket Introduction WebSocket general:阮一峰的WebSocket 教程...

  • 2020-04-03

    ## webSocket初探 ## 目录 - 为什么WebSocket - 什么是WebSocket - WebS...

  • 第一章: WebSocket初识

    关于webSocket的话题并不少见,比如我们经常遇到的聊天室啦,实时的消息互动啦,巴拉巴拉很多东西都会使用的一项...

  • WebSocket

    WebSocket(1)---WebSocket介绍 一、为什么需要 WebSocket?初次接触 WebSock...

  • Spring和WebSocket整合详解

    Spring和WebSocket整合详解 官方主页 Spring WebSocket 概述 WebSocket 是...

网友评论

      本文标题:初识websocket

      本文链接:https://www.haomeiwen.com/subject/hydhbdtx.html