2021-3-29websocket,socket.io

websocket

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。
WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

websocket对象

以下 API 用于创建 WebSocket 对象

const ws = new WebSocket(url)

websocket的事件

事件名事件处理程序描述
openws.onopen连接建立时触发
messagews.onmessage客户端接收服务端数据时触发
errorws.onerror通信发生错误时触发
closews.onclose连接关闭时触发

websocket的方法

方法名描述
ws.send()使用连接发送数据
ws.close()关闭连接

客户端

客户端使用html5提供的原生的websocket进行通信
实现流程

 // 1 建立链接  使用h5原生的 websocket   使用的协议是ws (wss)  (类似于 http  https)
//  参数就是链接的服务器地址
const ws = new WebSocket('ws://localhost:3000');
//  2  判断链接是否成功
ws.onopen = function(){
    console.log('链接成功了');
    //  3. 链接成功后,可以向服务器传递数据  send(data) 参数就是传递的数据
    ws.send('发送数据给服务器')                
}

//  4 监听onmessage事件(服务器返回数据的事件)   参数就是服务器返回的数据
ws.onmessage = function(data){
    //  参数data 是一个MessageEvent对象  返回的数据在 data属性中
    console.log(data.data);                
}

//  监听错误
ws.onerror = function(err){
    console.log(err);    
}

//  监听关闭事件
ws.onclose = function(){
    console.log('客户端监听到链接关闭了');    
}

服务器端

借助插件 nodejs-websokcet 创建一个websocket的服务器端

  1. 安装插件
npm i nodejs-websocket --save
  1. 搭建服务
//  这是服务器端  nodejs-websocket 插件
const ws = require('nodejs-websocket')

//  搭建服务
//  参数 conn 就是当前的连接线 (当前在线的人)
ws.createServer((conn) => {
    //  监听text 事件  就是客户端向服务器端传递的数据
    conn.on('text', (str) => {
        //  参数 str 就是客户端向服务器传递的数据
        console.log(str);
        // 服务器向客户端返回数据 sendText(data)  参数data就是服务器返回的数据
        conn.sendText('服务器返回数据了')        
    })

    //  监听错误信息
    conn.on('error', (err) => {
        console.log(err);
        
    })

    //  监听关闭事件
    conn.on('close', () => {
        console.log('链接关闭');
        
    })
}).listen(3000, () => {
    console.log('server running ...');
    
})

socket.io

他可以结合多个框架使用,结合不同框架,搭建服务器端的方式也不同

客户端

下载客户端的socket.io.js 在页面中引入js文件

服务器端

下载服务端的socket.io 第三方包

npm i socket.io --save

socket.io在 express 框架中的用法

  1. 安装依赖
npm init -y // 初始化 
npm i express  socket.io --save
  1. 搭建服务器

拆分形式写法

const express = require('express')
const socket = require('socket.io')
const http = require('http')

const app = express();
// 都可以搭建服务器
// const server = http.Server(app)
const server = http.createServer(app)
const io = socket(server);


server.listen(3000, () => {
    console.log('server ....')
})

综合写法

const app = require('express')();
const server = require('http').createServer(app);
const io = require('socket.io')(server);


server.listen(3000, () => {
    console.log('server ....')
})

socket.io的基本用法

不管是客户端还是服务器端,都是通过 提交事件emit() 和监听事件on() 进行通信

emit()提交事件

socket.emit(eventName, value) 提交事件,

on() 监听事件

socket.on(eventName, (data) => {})

服务器发送消息的方式

const app = require('express')();
const server = require('http').createServer(app);
const io = require('socket.io')(server);

//  监听链接事件
io.on('connection', (socket) => {
    //  socket 当前在线的人的电话线
    socket.on('clientMsg', (value) => {
        // 方式1  自己给自己发消息
        socket.emit('send', value)
        //  方式2  自己给所有人发消息 (包含你自己) 通过 io对象
        io.emit('toAll', value)
        //  方式3   自己给所有人发消息,但是不包含自己  广播形式broadcast
        socket.broadcast.emit('hi');        
    })    
})

server.listen(3000, () => {
    console.log('server ....')
})
  1. 自己给自己发消息
    socket.emit('send', value)
  2. 自己给所有人发消息 (包含你自己) 通过 io对象
    io.emit('toAll', value)
  3. 自己给所有人发消息,但是不包含自己 广播形式broadcast
    socket.broadcast.emit('hi');
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值