前端知识点——Web Sockets

本文介绍了WebSocket作为前端实现双向通信的技术,它替代了传统的轮询方式。文章详细讲解了WebSocket API,包括WebSocket对象及其方法、事件,以及提供了一个Socket.IO的客户端和服务端示例。此外,还提到了在Node.js环境中支持WebSocket的库,如Socket.IO、WebSocket-Node和ws。

前端知识点——Web Sockets

本系列文章是我在实习面试之前的对自己掌握的知识点的总结,就从一直不太熟悉的webSockets开始吧~

WebSockets的第一印象:
可以创建和服务器进行双向会话的高级技术,取代了曾经使用的轮询方法。

API

  • WebSocket:用于连接WebSocket服务器的对象
  • CloseEvent:关闭连接时WebSocket对象触发的事件
  • MessageEvent:从服务器获取到消息的时候,WebSocket触发的事件

WebSocket对象

WebSocket对象用于创建和管理WebSockets连接,并通过这个连接发送和接受

参数:

  • url:要连接的url,ws或wss
  • protocols:协议名字字符串或数组,子协议,默认为空

异常:

  • SECURITY_ERR:表示试图连接的端口被屏蔽

方法:

  • WebSocket.close([code,[reason]])

    • 关闭WebSocket连接或停止正在进行的连接请求
    • 参数
      • code:关闭连接的状态号,默认为1000
      • reason:字符串,连接被关闭的原因
    • 异常
      • INVALID_ACCESS_ERR:无效的code
      • SYNTAX_ERR:reason太长
  • WebSocket.send(data)

    • 通过连接向服务器发送数据
    • 参数
      • data:发送的数据
    • 异常
      • INVALID_STATE_ERR:当前的连接状态不是open
      • SYNTAX_ERR:数据不合法

属性:

属性名类型描述
binaryTypestring传输的二进制内容类型,blob/arrayBuffer
bufferedAmountlong调用send方法后,队列中等等待数据的大小,发送后为0
extensionsstring服务器选定的扩展
oncloseEventListener监听close
onerrorEventListener监听error
onmessageEventListener监听message,消息到达触发
onopenEventListener监听连接打开事件,readyState为open时触发
protpcolstring服务器选定的子协议的字符串
readyStateshort连接的当前状态
urlstring传入构造器的url

readyState常量:

常量描述
CONNECTING0连接尚未开启
OPEN1连接已经开启,准备通信
CLOSING2连接正在关闭
CLOSED3连接已经关闭或者无法建立

例子

url来自http://www.blue-zero.com/WebSocket/

// Create WebSocket connection.
const socket = new WebSocket('ws://121.40.165.18:8800');

// Connection opened
socket.addEventListener('open', function (event) {
  socket.send('Hello Server!');
});

// Listen for messages
socket.addEventListener('message', function (event) {
  console.log('Message from server ', event.data);
});

// Listen for closed
socket.addEventListener('close', function (event) {
  console.log('Message from server ', event.data);
});

同时WebSocket需要服务器端支持,比如Node.js端可以使用以下常用的库:

Socket.IO例

客户端

let socket = io('http://localhost');
socket.on('news', function (data) {
  console.log(data);
  socket.emit('clientMsg', { my: 'data' });
});

服务端

首先要安装socket.io模块

npm install socket.io --save

或者在本目录下执行 npm install

serve.js 中粘贴如下代码

var app = require('http').createServer(handler)
var io = require('socket.io')(app);
var fs = require('fs');

app.listen(80);

function handler (req, res) {
  fs.readFile(__dirname + '/index.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }

    res.writeHead(200);
    res.end(data);
  });
}

io.on('connection', function (socket) {
  socket.emit('news', { hello: 'world' });
  socket.on('clientMsg', function (data) {
    console.log(data);
  });
});

执行 node serve.js并访问http://localhost:80

关于socket.io的其他API,文档以后再补充

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值