websocket【入门】

本文为websocket的入门篇,采用nodejs和原生js开发。

[参考链接1](https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket#See_also

[参考链接2](https://www.npmjs.com/package/nodejs-websocket)

简单介绍:

  

//创建websocket
//'ws://localhost:2333' websocket连接地址 
let socket = new WebSocket('ws://localhost:2333')

事件:

  websocket还有几个个配套事件,分别是open(监听websocket连接)、send(发送消息)、message(监听和接收消息)、close(监听websocket关闭)、error(监听错误消息)

完整案例:

  

//前端
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .msgbox{
            width: 300px;
            height: 200px;
            border: 1px solid rgb(238, 120, 120);
            margin-top: 30px;
            overflow-y: auto;
        }
    </style>
</head>
<body>
    <input type="text" placeholder="输入:">
    <button>发送</button>
    <div class="msgbox"></div>
</body>
<script>

    let oInput = document.querySelector('input');
    let oBut = document.querySelector('button');
    let oDiv = document.querySelector('.msgbox')

    //创建websocket
    let socket = new WebSocket('ws://localhost:2333')
    
    //连接成功
    socket.addEventListener('open',()=>{
        oDiv.innerHTML = '连接服务成功'
    })

    //发送
    oBut.addEventListener('click',()=>{
        let value = oInput.value
        socket.send(value)
        oInput.value = ''
    })

    //接受消息
    socket.addEventListener('message',(e)=>{
        console.log(e)
        // oDiv.innerHTML = e.data
        let data = JSON.parse(e.data)
        let dv = document.createElement('div')
        if(data.type == 0){
            dv.style.color = "rgba(49, 226, 49, 0.39)"
        }else if(data.type ==1){
            dv.style.color = "rgba(168, 168, 168, 0.658)"

        }
        dv.innerText =data.msg + ' ' + data.time.split(' ')[0]
        oDiv.appendChild(dv)
    })
</script>
</html>

 

后端采用nodejs,需要先引入相关依赖包

1,新建文件夹,并新建app.js文件

2,在终端打开,在改文件夹目录下引入依赖包:npm install nodejs-websocket

//后端

//1,导入ndejs-websocket报
const ws = require('nodejs-websocket')
const port = 2333
const TYPE_ENTER = 0
const TYPE_LEAVE = 1
const TYPE_MSG = 2

// 消息类型
// 0:进入聊天室
// 1:用户离开
// 2正常聊天

//记录用户
let count = 0

//2,创建一个server
//2,1 处理用户发送的信息

//每次只要有用户连接,函数就会执行,给当前用户创建连接
//每个用户连接服务端就有一个 connect 对象
const server = ws.createServer(connect => {
    console.log('用户连接')
    count++
    connect.userName = `用户${count}`
    //告诉所有用户,有人加入
    broadcast({
        type: TYPE_ENTER,
        msg: `${connect.userName}进入聊天室`,
        time: new Date().toLocaleTimeString()
    })

    //每当接触到用户传递的数据,text事件就会触发
    connect.on('text', data => {
        // console.log(data)
        //给用户一个响应的数据
        //数据处理
        broadcast({
            type: TYPE_MSG,
            msg: `${connect.userName}:${data}`,
            time: new Date().toLocaleTimeString()
        })
        // connect.send('服务端收到' + data)
    })
    //websocket断开连接
    connect.on('close', () => {
        console.log('连接断开');
        count--
        broadcast({
            type: TYPE_LEAVE,
            msg: `${connect.userName}退出聊天室`,
            time: new Date().toLocaleTimeString()
        })

    })

    //注册error事件,处理用户错误信息
    connect.on('error', () => {
        console.log('error')
    })
})

//广播,给所有用户发送消息
function broadcast(msg) {
    //server.connections : 所有用户
    server.connections.forEach(item => {
        item.send(JSON.stringify(msg))
    })
}

server.listen(port, () => {
    console.log('websocket服务启动,监听' + port + '端口')
})

 

posted on 2020-09-03 09:56  嗨哆嚒  阅读(226)  评论(0编辑  收藏  举报