当前位置: 首页 > article >正文

信令服务器设计之websocket

环境搭建

WebRTC 环境搭建-CSDN博客

前言

对于我们WebRTC项目而言,nodejs主要是实现信令服务器的功能,客户端和服务器端的交互我们选择websocket作 为通信协议,所以该章节的实战以websocket的使用为主。 web客户端的websocket和nodejs服务器端的websocket有一定的差别,所以我们分开两部分进行讲解。

客户端

        现在,很多网站为了实现推送技术,所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器 对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即 浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一 部分,显然这样会浪费很多的带宽等资源。

WebSocket 协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

主要特点:

  • 全双工通信:

    • WebSocket 建立连接后,客户端和服务器可以在任意时刻相互发送数据,无需遵循请求-响应模式。
    • 这使得它非常适合实时通信应用,如聊天、股票行情、多人游戏等。
  • 持久连接:

    • WebSocket 连接建立后会一直保持打开状态,直到一方主动关闭。
    • 这与传统的 HTTP 请求-响应模式不同,HTTP 连接在一次请求后就会立即关闭。
  • 低延迟:

    • WebSocket 协议的数据帧比 HTTP 报文小,并且没有重复的 HTTP 头信息,因此传输延迟更低。
  • 二进制数据传输:

    • WebSocket 支持传输文本数据和二进制数据,非常适合传输图像、视频等多媒体内容。
  • 跨域支持:

    • WebSocket 连接建立时会自动执行跨域检查,无需额外的跨域配置。
  • 较低的通信开销:

    • WebSocket 协议头部较小,相比 HTTP 协议减少了大量的开销。

        WebSocket 相比 Ajax 轮询的优势也非常正确。WebSocket 可以实现真正的实时双向通信,大大减少了网络开销和延迟。这使得 WebSocket 在实时应用领域有着广阔的应用前景。

总的来说,WebSocket 为 Web 客户端和服务器之间的通信带来了革命性的变革,必将在未来的 Web 开发中扮演越来越重要的角色。

代码示例

浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。

// WebSocketClient.js

// 创建 WebSocket 连接
const webSocket = new WebSocket('ws://example.com/websocket');

// 监听 WebSocket 事件
webSocket.onopen = function() {
  console.log('WebSocket connection established.');
};

webSocket.onmessage = function(event) {
  console.log('Received message:', event.data);
};

webSocket.onclose = function() {
  console.log('WebSocket connection closed.');
};

webSocket.onerror = function(event) {
  console.error('WebSocket error:', event.data);
};

// 发送消息的函数
function sendMessage(message) {
  if (webSocket.readyState === WebSocket.OPEN) {
    webSocket.send(message);
    console.log('Sent message:', message);
  } else {
    console.error('WebSocket connection is not open.');
  }
}

// 示例使用
sendMessage('Hello, WebSocket!');

Nodejs服务器 websocket

服务器端使用websocket需要安装nodejswebsocket

 sudo  npm init -y
 sudo npm install nodejs-websocket

我们只要关注:
(1)如何创建websocket服务器,通过createServer和listen接口;
(2)如何判断有新的连接进来,createServer的回调函数判断;
(3)如何判断关闭事件,通过on("close", callback) 事件的回调函数;
(4)如何判断接收到数据,通过on("text", callkback)事件的回调函数;
(5)如何判断接收异常,通过on("error", callkback)事件的回调函数;
(6)如何主动发送数据,调用sendText 

代码示例 

const WebSocket = require('ws');

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

// 监听 WebSocket 连接事件
wss.on('connection', (ws) => {
  console.log('WebSocket client connected');

  // 监听消息事件
  ws.on('message', (message) => {
    console.log('Received message:', message);

    // 向所有连接的客户端广播消息
    wss.clients.forEach((client) => {
      if (client !== ws && client.readyState === WebSocket.OPEN) {
        client.send(message);
      }
    });
  });

  // 监听关闭事件
  ws.on('close', () => {
    console.log('WebSocket client disconnected');
  });

  // 监听错误事件
  ws.on('error', (error) => {
    console.error('WebSocket error:', error);
  });
});

console.log('WebSocket server started on port 8080');

 总结

本章节主要介绍后续信令服务器的协议websocket基本运用,后续对信令服务器进行详细描述

学习资料分享

0voice · GitHub


http://www.kler.cn/a/391606.html

相关文章:

  • 智能电视/盒子的应用管理——通过ADB工具优化体验
  • 机器学习day3-KNN算法、模型调优与选择
  • SpringBoot(八)使用AES库对字符串进行加密解密
  • Mit6.S081-实验环境搭建
  • Debezium日常分享系列之:异步 Debezium 嵌入式引擎
  • Dial-insight:利用高质量特定领域数据微调大型语言模型防止灾难性遗忘
  • Spring Boot基础教学:Spring Boot 简介
  • 元器件封装
  • Linux系统编程学习 NO.11——进程的概念(2)
  • IntelliJ+SpringBoot项目实战(四)--快速上手数据库开发
  • php中ajax怎么使用【小白专用24.11.12】
  • git怎么切换分支
  • 安装双系统(linux操作系统(debian)安装)
  • Kafka新节点加入集群操作指南
  • 前端性能优化2
  • Redis主从复制(replication)
  • SpringBoot(十七)创建多模块Springboot项目
  • Redis中的持久化
  • C# Properties保存参数
  • LeetCode:103. 二叉树的锯齿形层序遍历
  • 2024-11-13 Unity Addressables1——概述与导入
  • Flink Source 详解
  • 成都睿明智科技有限公司解锁抖音电商新玩法
  • 计算器上的MC、MR、M+、M—、CE是什么意思?
  • 正向代理服务器
  • TP6将HTML转换为PDF文件,非法UTF-8编码和中文乱码问题