前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航
基础篇
进阶篇
高频篇
精选篇
手写篇
原理篇
面经篇
自检篇
每日一题
  • 综合
    • 综合题型
    • 其他问题
    • 设计模式
    • 思维导图
    • 学习路线
  • 前端基础
    • HTTP
    • 浏览器
    • 计算机基础
  • 进阶学习
    • NPM工作流
    • Docker
    • Canvas
    • Node学习指南
    • 前端综合文章
  • 其他
    • Handbook
    • 职场话题
    • CSS可视化
小程序题库
公众号动态
博客动态
开发者导航

nodejs系列之websocket及socket.io

首页
2019-01-24 15:00:43
Back-end
SocketWebsocket

# 第一部分 WebSocket

# 一、WebSocket 解决了什么问题

  • 客户端(浏览器)和服务器端进行通信,只能由客户端发起ajax请求,才能进行通信,服务器端无法主动向客户端推送信息
  • 当出现类似体育赛事、聊天室、实时位置之类的场景时,客户端要获取服务器端的变化,就只能通过轮询(定时请求)来了解服务器端有没有新的信息变化

轮询效率低,非常浪费资源(需要不断发送请求,不停链接服务器)

WebSocket的出现,让服务器端可以主动向服务器端发送信息,使得浏览器具备了实时双向通信的能力,这就是WebSocket解决的问题

一个超简单例子

新建一个html文件,将本栗子找个地方跑一下试试,即可轻松入门WebSocket

function socketConnect(url) {
    // 客户端与服务器进行连接
    let ws = new WebSocket(url); // 返回`WebSocket`对象,赋值给变量ws
    // 连接成功回调
    ws.onopen = e => {
        console.log('连接成功', e)
        ws.send('我发送消息给服务端'); // 客户端与服务器端通信
    }
    // 监听服务器端返回的信息
    ws.onmessage = e => {
        console.log('服务器端返回:', e.data)
        // do something
    }
    return ws; // 返回websocket对象
}
let wsValue = socketConnect('ws://121.40.165.18:8800'); // websocket对象
@前端进阶之旅: 代码已经复制到剪贴板

上述栗子中WebSocket的接口地址出自:WebSocket 在线测试,在开发的时候也可以用于测试后端给的地址是否可用

# 二、webSocket的class类

当项目中很多地方使用WebSocket,把它封成一个class类,是更好的选择

class WebSocketClass {
    /**
     * @description: 初始化实例属性,保存参数
     * @param {String} url ws的接口
     * @param {Function} msgCallback 服务器信息的回调传数据给函数
     * @param {String} name 可选值 用于区分ws,用于debugger
     */
    constructor(url, msgCallback, name = 'default') {
        this.url = url;
        this.msgCallback = msgCallback;
        this.name = name;
        this.ws = null;  // websocket对象
        this.status = null; // websocket是否关闭
    }
    /**
     * fe
  • 第一部分 WebSocket
    • 一、WebSocket 解决了什么问题
    • 二、webSocket的class类
    • 三、WebSocket不稳定
      • 3.1 WebSocket设置变量,判断是否手动关闭连接
      • 3.2 WebSocket心跳机制
    • 四、关于WebSocket
      • 4.1 WebSocket的当前状态:WebSocket.readyState
      • 4.2 WebSocket还可以发送/接收 二进制数据
    • 五、WebSocket的优点
  • 第二部分 socket.io
    • 一、原生Node与socket.io通信
      • 1.1 搭建服务
      • 1.2 新建页面
      • 1.3 服务器端通过emit广播,通过on接收广播
      • 1.4 客户端端通过emit广播,通过on接收广播
    • 二、聊天室、智能机器人实现原理
      • 2.1 express简单例子
      • 2.2 express实现智能机器人
      • 2.3 express结合socket.io及数据库实现智能机器人
    • 三、Koa中Socket.io的使用

← node基础篇回顾MongoDB拾遗(一) →