node + koa + websocket 开发即时通讯聊天室(一)

(一)通讯过程

红色就是消息流动过程,A给B发送消息,A先发给服务器,服务器再发给B,B 回复 A 的消息,B 将消息先发给服务器,服务器将消息发送给A

(二)什么是 websocket

(1)websocket 协议是基于 TCP 的一种新的网络协议,它实现了 浏览器 与 服务器 的 全双工通信(全双工通信:浏览器既可以主动给服务端发消息,服务券也可以主动给浏览器发消息)

而 http 是无法实现这种功能的,http 是 发送 ---> 请求流程,如果不发送请求,服务端是不能主动给浏览器发消息的

websocket 是一种持久协议(长链接),http是非持久协议(每次服务器发送一个对象后相关的TCP连接就被关闭,也就是说每个连接没有持续到可以传输其他对象。每个TCP连接只能传送一个请求消息和响应消息)

(2)传统的聊天方式

传统的聊天采用 ajax 轮询的方式,(http 方式)采用定时器,向服务器发送请求,但是这样对服务器性能不好,浪费性能和资源

(3)websocket 使用场景:客服、在线聊天等等;

(三)h5 中新增的 websocket API

客户端

//  WebSocket 事件

// open: 连接建立时触发

// message: 客户端接受服务端数据时触发

// error: 通信发生错误时触发

// close: 连接关闭时触发

 

// WebSocket 方法

// 1. Socket.send() 发送数据

// 2. Socket.close() 关闭连接

html 代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>websocket</title>
  <style>
    #message_list {
      border: 1px solid black;
      padding: 10px;
      width: 200px;
      margin-top: 10px;
    }
  </style>
</head>
<body>
  <!-- 输入框 -->
  <input type="text" id="input">
  <!-- 发送按钮 -->
  <button id="btn">发送消息</button>
  <!-- 消息列表 -->
  <div id="message_list"></div>
  <script src="./index.js"></script>
</body>
</html>

1. 首先建立连接

var button = document.getElementById('btn')
var input = document.getElementById('input')
var messageList = document.getElementById('message_list')

// websocket 是一个构造函数 使用时候 new 一下
// 参数:websocket 的服务地址
// 现在这个地址是官方自带的 后续会自己写一个
let websocket = new WebSocket('ws://echo.websocket.org')

// 连接建立
websocket.addEventListener('open', () => {
  messageList.innerHTML = '连接成功'
})

当刷新页面,连接已成功:

2. 点击按钮发送消息

// 点击发送消息按钮 将输入框中的内容发送
button.addEventListener('click', () => {
  websocket.send(input.value)
})

Network 中 WS 指的就是 websocket 连接,左侧 Name 一栏 echo.websocket.org 就是 websocket 的连接建立,进行的一个长连接,当发送的时候,所有数据都会在这个 连接里

绿色的是发送消息,红色的是服务端响应消息,默认是 发什么 回什么

3. 接受 websocket 回复的消息

// 客户端接受服务端数据
websocket.addEventListener('message', (message) => {
  console.log('message', message)
  messageList.innerHTML = message.data
})

可见 服务端回复的数据 在 data 字段里面,回复的消息也渲染在了消息框中

4. 监听 通信发生错误/连接关闭

// 通信发生错误
websocket.addEventListener('error', () => {
  console.log('websocket error')
})

// 连接关闭
websocket.addEventListener('close', () => {
  console.log('websocket closed')
})

以上就是 h5 websocket 的 API 使用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值