使用node简单搭建websocket服务器

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

背景

我们都知道,http协议通信只能由客户端发起,然后服务端再做出响应;但是websocket协议最大的特点是服务端可以主动向客户端推送消息,客户端也可以主动向服务器发送消息

往常实现双向通信的方法主要是轮询,客户端通过定时器,每隔一段时间就会主动发送请求给服务器,这无疑是会耗很多的流量和给服务端造成资源消耗;而websokcet实时性更强,当服务器和客户端之间交换数据时更少的控制开销。

node搭建websocket服务器

下载websocket依赖  websocket - npm

npm i websocket

在文件下下创建server.js 文件,跟着npm文档的例子引入使用即可

/* server.js 服务器 */

// 引入
const WebSocketServer = require('websocket').server
const http = require('http')
const port = 8000
let time = 0

// 创建服务器
const server = http.createServer((request, response) => {
  console.log(`${new Date().toLocaleDateString()} Received request for ${request.url}`)
  response.writeHead(404)
  response.end()
})
server.listen(port, () => {
  console.log(`${new Date().toLocaleDateString()} Server is listening on port ${port}`)
})


// websocket 服务器
const wsServer = new WebSocketServer({
  httpServer: server
})

// 建立连接
wsServer.on('request', (request) => {
  // 当前的连接
  console.log(request.origin, '=======request.origin=======')
  const connection = request.accept(null, request.origin)
  console.log(`${new Date().toLocaleDateString()} 已经建立连接`)

  setInterval(() => {
    const obj = {
      title: '标题' + time++,
      value: '内容' + time++
    }
    connection.send(JSON.stringify(obj))
  }, 2000)

    // 监听客户端发来的的消息
  connection.on('message',  (message) => {
    console.log('message========>', message)
    if (message.type === 'utf8') {
        console.log('Received Message: ' + message.utf8Data);
        // connection.sendUTF(message.utf8Data);
    } else if (message.type === 'binary') {
        // binary 二进制
        console.log('Received Binary Message of ' + message.binaryData.length + ' bytes');
        // connection.sendBytes(message.binaryData);
    }
  });

  // 监听当前连接 当断开链接(网页关闭) 触发
  connection.on('close', (reasonCdoe, description) => {
    console.log(`${new Date().toLocaleDateString()} ${connection.remoteAddress} 断开链接`)
  })
})

客户端实现

在文件下下新建index.html文件,更多的api介绍可看文档 WebSocket - Web API 接口参考 | MDN

// index.html 
<script>
  // 创建webscoket 对象 地址填入本地ip 端口是在搭建websocket服务器定义的端口
  const ws = new WebSocket('ws://127.0.0.1:8000')
  // 执行上面的语句之后,客户端就会与服务器进行连接

  // readyState返回当前实例对象的当前状态
  /*
    共有四种状态
    CONNECTING: 值为0,表示正在连接
    OPEN:  值为1,表示连接成功,可以通信了
    CLOSING 值为2, 表示连接正在关闭
    CLOSED 值为3,表示连接已经关闭了,或者打开连接失败
  */

  // 实例对象的onopen属性,用于指定连接成功后的回调函数
  ws.onopen = (res) => {
    console.log('onopen readyState',ws.readyState)
    console.log('onopen 连接成功==========>', res)
  }

  // 实例对象的onmessage属性,用于指定收到服务器数据后的回调函数
  ws.onmessage = ({ data }) => {
    console.log('onmessage readyState',ws.readyState)
    // 注意此时的data是json格式的 需要转化下
    console.log('onmessage 有新消息啦=======>', JSON.parse(data))
    // 实例对象的send方法给服务器发送消息
    ws.send('客户端发送的消息')
  }

  // 实例对象的onclose属性,用于连接关闭后的回调 函数
  // 当关闭了服务器后 会走到此回调函数
  ws.onclose = () => {
    console.log('onclose readyState',ws.readyState)
    console.log('onclose websocket连接关闭=======>')
  }

  // 连接发生错误的回调方法
  // 如当服务器没有启动 就会走到这个错误回调
  ws.onerror = (error) => {
    console.log('onerror readyState',ws.readyState)
    console.log('onerror 发生错误==========>', error)
  }

</script>

拓展

在服务器重启或是弱网情况下,前端不能保证一直连接成功。因此在出现被动断开的情况下,需要有心跳机制断线重连的功能。

后续单独详说这部分。

websocket使用场景

目前来说,我在工作中用到websocket的主要场景是:需要实时轮播通告用户订阅的消息,实时的图表数据展示。

当然还有应用最广泛的是使用websocekt实现聊天室功能,这个还没玩过😂,有时间可以试试。文章来源地址https://www.toymoban.com/news/detail-449565.html

~~~ end ~~~

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

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

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

相关文章

  • 疯狂Node.js服务器篇:使用VsCode搭建Node.js开发环境

    疯狂Node.js服务器篇:使用VsCode搭建Node.js开发环境 Node.js作为一种流行的服务器端JavaScript运行环境,提供了强大的功能和便捷的开发体验。在本篇文章中,我们将探索如何使用VsCode搭建Node.js开发环境,以便更高效地进行服务器端应用程序的开发。 步骤1:安装Node.js 首先,我们

    2024年02月08日
    浏览(18)
  • 使用阿里云服务器搭建网站简单吗?超简单教程

    使用阿里云服务器搭建网站简单吗?超简单教程

    使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例,来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流程: 首先你需要注册一个阿里云账号,

    2024年03月10日
    浏览(19)
  • 使用nginx简单搭建一个ChatGPT代理服务器

    使用nginx简单搭建一个ChatGPT代理服务器

    作者:ChenZhen 本人不常看CSDN消息,有问题通过下面的方式联系: 邮箱:1583296383@qq.com vx: ChenZhen_7 我的个人博客地址:https://www.chenzhen.space/🌐 版权:本文为博主的原创文章,本文版权归作者所有,转载请附上原文出处链接及本声明。📝 如果对你有帮助,请给一个小小的sta

    2024年02月06日
    浏览(12)
  • 使用esp32+micropython+microdot搭建web(http+websocket)服务器(超详细)第一部分

    使用esp32+micropython+microdot搭建web(http+websocket)服务器(超详细)第一部分

    microdot文档速查 什么是Microdot?Microdot是一个可以在micropython中搭建物联网web服务器的框架 micropyton文档api速查 Quick reference for the ESP32 演示视频链接 视频中我们简单的实现了 使用esp32搭建web服务器 实现get请求 上传网页到服务器 手机打开网址访问该网页 服务器处理请求,实现开

    2024年02月08日
    浏览(17)
  • 教你如何使用云服务器搭建我的世界Minecraft服务器(超级简单-10分钟完成)

    教你如何使用云服务器搭建我的世界Minecraft服务器(超级简单-10分钟完成)

    一个人玩游戏没啥意思,和朋友一块联机呢,距离太远,家庭局域网宽带又没有公网ip,你的朋友没办法与你联机,然而你只需要一台服务器即可搞定了;但是很多用户没没接触过相关的内容,具体的该怎么操作呢?下面我将吧详细的教程分享给大家,适合完全零基础,跟着

    2024年02月07日
    浏览(22)
  • 使用Nodejs搭建简单的HTTP服务器 - 内网穿透公网远程访问

    使用Nodejs搭建简单的HTTP服务器 - 内网穿透公网远程访问

    🎉博客主页:小智_x0___0x_ 🎉欢迎关注:👍点赞🙌收藏✍️留言 🎉系列专栏:小智带你闲聊 🎉代码仓库:小智的代码仓库 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation(原为 Node.js Foundation,已与 JS Foundation 合并)持有和维

    2024年02月11日
    浏览(16)
  • 【网络原理】使用Java基于TCP搭建简单客户端与服务器通信

    【网络原理】使用Java基于TCP搭建简单客户端与服务器通信

    TCP服务器与客户端的搭建需要借助以下API ServerSocket 是创建TCP服务端Socket的API。 ServerSocket 构造方法 : 方法签名 方法说明 ServerSocket(int port) 创建一个服务端流套接字Socket,并绑定到指定端口 ServerSocket 方法: 方法签名 方法说明 Socket accept() 开始监听指定端口(创建时绑定的端

    2024年03月12日
    浏览(13)
  • 使用node搭建服务器,前端自己写接口,将vue或react打包后生成的dist目录在本地运行

    使用node搭建服务器,前端自己写接口,将vue或react打包后生成的dist目录在本地运行

    vue项目打包后生成的dist目录如果直接在本地打开index.html,在浏览器中会报错,无法运行起来。 通常我是放到后端搭建的服务上面去运行,当时前端自己也可以是node,nuxt搭建服务器,写接口等等 如果想在本地运行,我们可以借助node.js+express搭建一个服务器,将打包后的文件部

    2024年02月03日
    浏览(14)
  • 【内网穿透】使用Nodejs搭建简单的HTTP服务器 ,并实现公网远程访问

    【内网穿透】使用Nodejs搭建简单的HTTP服务器 ,并实现公网远程访问

    目录 前言 1.安装Node.js环境 2.创建node.js服务 3. 访问node.js 服务 4.内网穿透 4.1 安装配置cpolar内网穿透 4.2 创建隧道映射本地端口 5.固定公网地址 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation(原为 Node.js Foundation,已与 JS Foundat

    2024年02月10日
    浏览(17)
  • 超简单的node.js服务器配置(1)

    超简单的node.js服务器配置(1)

    node安装教程我之前有出过,不会的可以去看一下(node.js安装教程) 1.引入http模块(这个模块是node.js内置的模块) 2.创建服务器实例并监听端口(8080)开启服务器,监听客户端请求并进行处理 打开服务器地址 127.0.0.1:8080/ 查看一下效果: http.createServer()方法有一个参数为回调函数

    2024年02月15日
    浏览(12)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包