websocket结合node.js实现双向通信的示例代码

 更新时间:2023年02月10日 09:16:03   作者:xiaoyingyings  
本文主要介绍了websocket结合node.js实现双向通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

首先我们需要了解,什么是websocket,它的作用和优势是什么,为什么要用它。

什么是websocket?

websocket是基于TCP的一种双向通信协议。在此之前,一直是采用轮询的方式进行双向通信,这种方式效率低下还非常浪费资源。为了解决这种问题,websocket应运而生。

特点:

双向通信
websocket使得客户端跟服务端之间交换数据变得更加简单。允许服务器主动向客户端推送数据。浏览器只需要和服务器完成一次握手,就可以创建持久性的连接,并进行双向数据传输。

实时性强
服务器可以主动给客户端推送数据,相比http请求需要先由客户端发起请求,浏览器才会响应,延迟明显更少、时间更短。

连接保持
websocket连接创建成功后,只要连接不断开,通信会一直保持,而且还会省略部分状态信息(http请求可能每次请求都需要携带状态信息)
相对于http,websocket优势显而易见。所以在一些实时通信上,都需要用到websocket,比如多媒体聊天、玩家游戏、页面局部刷新、协同编辑等场景。

介绍完了什么是websocket,下面介绍下如何使用websocket。

WebSocket 的用法很简单:

var ws = new WebSocket("ws://localhost:8181");

// 指定连接成功后的回调函数
ws.onopen = function() {  
// 向服务器发送数据,数据类型包括文本类型/blob对象/ArrayBuffer对象
  ws.send("Hello WebSockets!"); 
};

// 指定收到服务端数据后的回调函数
(注意:返回数据可能是文本,也可能是二进制数据(blob对象或Arraybuffer对象))
ws.onmessage = function(e) {
  console.log( "收到服务端信息: " + e.data);
  ws.close(); // 关闭websocket连接方法
};

// 指定连接关闭后的回调函数
ws.onclose = function() {
  console.log("连接已关闭");
};    

然后是服务端,服务端需要下载nodejs-websocket:

npm i nodejs-websocket

nodejs-websocket文档地址 这个文档里详细描述了如何使用,这里不做赘述。直接上代码展示双方通信效果:

客户端:
(这里使用了vue框架搭建项目,把该方法放进vue页面即可,多余代码不再多写)

export default {
  mounted () {
    this.contactSocket()
  },
  methods: {
    contactSocket () {
      if (window.WebSocket) {
        const ws = new WebSocket('ws://192.168.1.124:8181')
        ws.onopen = function () {
          console.log('连接服务器成功')
          ws.socket.send('你好服务器')
        }
        ws.onmessage = function (e) {
          alert(e.data)
        }
        ws.onclose = function () {
          console.log('连接已关闭')
        }
      } else {
        console.log('当前浏览器不支持WebSocket!')
      }
    }
  }
}

服务端:
(这里是命名为server.js的文件,放在了vue项目的根目录,启动时候需要启动node服务,终端拆分一个端口,输入:node server.js)

const ws = require('nodejs-websocket')
ws.createServer(function (conn) {
    conn.on('text', function (data) { // 收到客户端数据的回调方法 
        conn.sendText(data) // 把客服端发送过来的信息再发回去
    })
    conn.on('close', function (e) { // 关闭服务器的回调方法
        console.log(e, '服务端连接关闭')
    })
    conn.on('error', function (e) { // 服务端连接异常的回调方法
        console.log(e, '服务端异常')
    })
}).listen(8181) // 监听8181端口,跟客户端连接端口对应
console.log('服务端已开启')

代码放上去后,启动服务端,终端显示:服务端已开启;页面将弹出:你好服务器。说明websocket连接成功,恭喜你,完成了websocket的双向通信!

到此这篇关于websocket结合node.js实现双向通信的示例代码的文章就介绍到这了,更多相关websocket node.js双向通信内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 快速掌握Node.js环境的安装与运行方法

    快速掌握Node.js环境的安装与运行方法

    这篇文章主要介绍了Node.js环境的安装与运行方法,Node是基于Google Chrome V8引擎的JavaScript解释器,需要的朋友可以参考下
    2016-02-02
  • Npm link的作用与使用示例代码

    Npm link的作用与使用示例代码

    npm link可以帮助我们模拟包安装后的状态,它会在系统中做一个快捷方式映射,让本地的包就好像 install 过一样,可以直接使用,这篇文章主要介绍了Npm link的作用与使用示例代码,需要的朋友可以参考下
    2023-01-01
  • 如何使用Node.js爬取任意网页资源并输出PDF文件到本地

    如何使用Node.js爬取任意网页资源并输出PDF文件到本地

    这篇文章主要介绍了使用Node.js爬取任意网页资源并输出高质量PDF文件到本地,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,下面小编就来和大家一起学习吧
    2019-06-06
  • nodejs之base64编码解码问题

    nodejs之base64编码解码问题

    这篇文章主要介绍了nodejs之base64编码解码问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • Express框架之connect-flash详解

    Express框架之connect-flash详解

    本篇文章主要介绍了Express框架之connect-flash详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Nodejs进程管理模块forever详解

    Nodejs进程管理模块forever详解

    服务器管理是系统上线后,必须要面对的问题。最好有一个软件可以提供整套的服务器运行解决方案:要求运行稳定,支持高并发,启动/停止命令简单,支持热部署,宕机重启,监控界面和日志,集群环境。
    2014-06-06
  • node异步使用await和不用await的区别实例分析

    node异步使用await和不用await的区别实例分析

    这篇文章主要介绍了node异步使用await和不用await的区别,结合实例形式分析了node.js异步使用await和不用await的实例中,同步与异步执行的区别,需要的朋友可以参考下
    2023-06-06
  • koa大型web项目中使用路由装饰器的方法示例

    koa大型web项目中使用路由装饰器的方法示例

    这篇文章主要介绍了koa大型web项目中使用路由装饰器的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 浅谈Nodejs观察者模式

    浅谈Nodejs观察者模式

    这篇文章主要介绍了浅谈Nodejs观察者模式的相关资料,需要的朋友可以参考下
    2015-10-10
  • node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)

    node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)

    本文将详细介绍node.JS的加密模块crypto实现MD5,AES,Hmac,Diffie-Hellman加密的详解方法,需要的朋友可以参考下
    2020-02-02

最新评论