【NodeJS】nodejs提供websocket服务

这篇具有很好参考价值的文章主要介绍了【NodeJS】nodejs提供websocket服务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

背景

在开发业务系统的时候,根据开发人员不同的技术栈,会使用不同的技术来开发微服务。本文是基于NodeJS提供的websocket的服务。在websocket通过分片的方式将字符串进行切割传递。

正文

1、源码

server.js:

const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 8080 });
server.on('connection', (socket) => {  
  console.log('Client connected');

  // 模拟分片传输  
  var message = 'Hello, WebSocket!数据映射的方式有两种:';  
  
  console.log(message.length);   
  
  const chunkSize = 5;  
  const totalChunks = Math.ceil(message.length / chunkSize);

  for (let i = 0; i < totalChunks; i++) {  
    const start = i * chunkSize;  
    const end = i === totalChunks - 1 ? message.length : start + chunkSize;  
    const chunk = message.slice(start, end);

    socket.send(chunk);  
    console.log(`Sending chunk ${i + 1}/${totalChunks} - ${chunk}`);  
  }

  socket.on('close', () => {  
    console.log('Client disconnected');  
  });  
});

console.log('Server is running on port 8080'); 

client.js:

const WebSocket = require('ws');

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

ws.on('open', () => {  
  console.log('连接已建立');

  // 发送握手请求  
  ws.send(  
    JSON.stringify({  
      Upgrade: 'websocket',  
      Connection: 'Upgrade',  
      //Sec_WebSocket_Accept: createSecWebSocketAccept(ws),  
    })  
  );

  // 发送分片消息  
  const message = 'Hello, WebSocket!';  
  const parts = chunk(message, 1024);  
  parts.forEach((part, index) => {  
    ws.send(JSON.stringify({ type: 'split', parts: [part], index: index }));  
  });

  // 接收响应  
  ws.on('message', (message) => {  
    //const data = JSON.parse(message);  
    //if (data.type === 'response') {  
    console.log('接收到的响应:', message);  
    //}  
  });

  // 关闭连接  
  ws.on('close', () => {  
    console.log('连接已关闭');  
  });  
});

function chunk(str, size) {  
  const chunks = [];  
  for (let i = 0; i < str.length; i += size) {  
    chunks.push(str.slice(i, i + size));  
  }  
  return chunks;  
}

function createSecWebSocketAccept(ws) {  
  const key = ws.url.split('=').pop();  
  const AcceptKey = WebSocket.createSecureContext().SecureSocket.prototype.sec_websocket_accept;  
  return AcceptKey.replace('$WS_KEY$', key);  
}

2、运行

1>、启动server.js

执行命令:

node server.js

运行效果:

【NodeJS】nodejs提供websocket服务,NodeJS,前端与vue,websocket,网络协议,网络,node.js

2>、启动client.js

执行命令:

node client.js

运行效果:

客户端:

【NodeJS】nodejs提供websocket服务,NodeJS,前端与vue,websocket,网络协议,网络,node.js

服务端:

【NodeJS】nodejs提供websocket服务,NodeJS,前端与vue,websocket,网络协议,网络,node.js

3、扩展

Nodejs提供http服务,参考如下案例:文章来源地址https://www.toymoban.com/news/detail-803070.html

const http = require("http");
 
const hostname = "127.0.0.1";
const port = 3000;
//创建HTTP服务器,并提供两个对象,一个请求(http.IncomingMessage对象)和一个
//响应(http.ServerResponse对象)
const server = http.createServer((req, res) => {
    res.statusCode = 200;//设置statusCode属性为200,以表相应成功
    res.setHeader("Content-Type", "text/plain");//设置Content-Type响应头
    res.end("Hello World1111\n");//关闭响应,添加内容作为end()的参数
})
//服务器启动监听
server.listen(port, hostname, () => {
    console.log(`服务器运行在http://${hostname}:${port}/`);
})

到了这里,关于【NodeJS】nodejs提供websocket服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nodejs 实现MQTT协议的服务器端和客户端的双向交互

    公司和第三方合作开发一个传感器项目,想要通过电脑或者手机去控制项目现场的传感器控制情况。现在的最大问题在于,现场的边缘终端设备接入的公网方式是无线接入,无法获取固定IP,所以常规的HTTP协议通信就没法做,现在打算使用MQTT来实现云平台和边缘终端(传感器

    2024年02月05日
    浏览(68)
  • vue3+nodejs(websocket)实现监控拉rtsp流,使用flv.js+ffmpeg包(主要建立websocket是为了转码传流)

    关于拉取监控摄像头的流,我个人去查了很多资料,也是因为之前没有接触过这一模块,加上目前公司也没有后端去写接口,所以我直接用node去写websocket,与前端建立起通信,能够进行后续转码、传流,能够实现实时播放监控画面。 这里的rtsp流是要事先知道的,监控的这个

    2024年02月20日
    浏览(49)
  • 【微服务部署】四、Jenkins一键打包部署NodeJS(Vue)前端项目步骤详解

      本文介绍使用Jenkins一键将NodeJS(Vue)前端项目打包并上传到生产环境服务器,这里使用的是直接打包静态页面,发送到远程服务器Nginx配置目录的方式,首先确保服务器环境配置好,安装Nginx,运行目录,日志存放目录等。 一、服务器环境配置   Nginx安装也有多种方式

    2024年02月10日
    浏览(44)
  • mac制作ssl证书|生成自签名证书,nodejs+express在mac上搭建https+wss(websocket)服务器

    mac 自带 openssl 所以没必要像 windows 一样先安装 openssl,直接生成即可 生成 key 让输入两次密码,随便,但是两次得是一样的 移除密码 生成 csr Country Name (2 letter code) [ 国家 ]:CN State or Province Name (full name) [ 省份 ]:Beijing Locality Name (eg, city) [ 城市 ]:Beijing Organization Name (eg, company)

    2024年02月09日
    浏览(46)
  • vane 一个适用于前端打工人的全栈框架,nodejs+vue3+typescript

    写这个的初衷是因为每次用node写接口的时候总是需要一些写大一堆的东西, 也有些人把很多接口都放在一个js文件内, 看起来很是杂乱, 后来用到nuxt写的时候, 感觉用文件名来命名接口路径很是方便, 无论是query参数还是params参数,都可以通过文件名来命名, 也可以通过文件夹层级

    2024年02月11日
    浏览(47)
  • vue+elementui+nodejs校园生活信息服务快递系统v62911

     语言 node.js 框架:Express 前端:Vue.js 数据库:mysql  数据库工具:Navicat 开发软件:VScode  学生登录,学生通过填写用户名、密码、权限等信息,输入完成后选择登录即可进入校园快领服务系统 学生登录进入校园快领服务系统可以查看首页、个人中心、快递信息管理、取货信

    2024年02月05日
    浏览(40)
  • 微信小程序nodejs+vue社区居民健康服务系统uniapp

      系统分为社区居民,管理员,县区工作员,社区工作员三个角色 县区工作员的主要功能: 1.对社区的工作人员进行添加,修改,删除,查询 2.疫情专栏的信息进行添加,修改,删除,查询 3.对官方的通告信息进行添加,修改,删除,查询 社区工作员的主要功能: 1.对社区

    2024年02月06日
    浏览(58)
  • 发现一个开源的Chatgpt-web应用,前端使用vue编写,后端也是nodejs代码编写的。

    演示视频: https://www.bilibili.com/video/BV1WC4y1k7j5/?vd_source=4b290247452adda4e56d84b659b0c8a2 【chatglm3】(10):使用fastchat本地部署chatlgm3-6b模型,并配合chatgpt-web的漂亮界面做展示,调用成功,vue的开源项目 部署脚本和方法: https://gitee.com/fly-llm/dify-mysql-llm/tree/master/fastchat-docker-compose ht

    2024年02月11日
    浏览(74)
  • nodejs项目实战教程01——http服务和URL类,前端开发社招面试解答之性能优化

    需要在终端重新执行一次node app.js浏览器的内容才会刷新 4.如何获取url中的参数 ============================================================================ 4.1 URL类基础 建议大家可以先看看Node.js API文档中的url 网址部分,这里做简要说明。url字符串在nodejs的url模块,有两种解析API,其中旧版的

    2024年04月11日
    浏览(46)
  • nodejs实现前后端websocket通信+心跳示例

    nodejs后端代码  server.js 直接在文件所在目录打开cmd窗口,启动服务: node server.js 浏览器端  index.html 在本地直接运行浏览器即可! 如果有帮助,就点个赞再走 ^  ^                                               

    2024年02月13日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包