websocket

23 篇文章 0 订阅
21 篇文章 0 订阅

服务端

/*
 * @Descripttion:
 * @Author: voanit
 * @Date: 2022-11-16 15:35:39
 * @LastEditors: voanit
 * @LastEditTime: 2022-11-16 16:03:04
 */const express = require('express')
const app = express()
const http = require('http').createServer(app)
const io = require('socket.io')(http, { cors: true }) //创建了一个websocket服务器 并且解决了跨域const messageList = []
io.on('connection', (socket) => {
  // 客户端链接成功
  console.log('~connection~')
  // 触发一个message事件  传递一个对象数据过去   浏览器
  socket.emit('message', { msg: '我是服务器' })

  socket.on('Tom', (e) => {
    // console.log('tom', e)/* 这里如果使用 socket  表示:谁触发tom事件只会向谁发射事件
    如果是发射事件触发对象是io 表示:只要监听了触发事件都会监听触发
    */
    io.emit('messageTom', e)
  })
})

http.listen(3009, '192.168.103.84', (_) => {
  console.log('http://192.168.103.84:3009')
})

前端 tom页面

<!--
 * @Descripttion: 
 * @Author: voanit
 * @Date: 2022-11-16 15:40:30
 * @LastEditors: voanit
 * @LastEditTime: 2022-11-16 16:31:06
--><!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>Tom</title><scriptsrc="https://cdn.socket.io/4.4.0/socket.io.min.js"></script><!-- <script src="https://cdn.socket.io/4.4.1/socket.io.esm.min.js"></script> --></head><body><ul></ul><inputtype="text"name=""id="ipt"placeholder="请输入内容"><buttonid="btn">点击发消息</button><script>const btn = document.querySelector('#btn')
    const ipt = document.querySelector('#ipt')
    const box = document.querySelector('ul')

    /* 监听connect事件 */const socket = io('http://192.168.103.84:3009');
    socket.on('connect', () => {
      console.log('看到这里,表示和服务器连接上了')
    })

    /* 浏览器监听这个事件 */
    socket.on('message', (e) => {
      console.log('message', e, 8888)
    })

    btn.onclick = function () {
      console.log(1111);
      /* 发射一个Tom事件 并传递数据给服务器 */
      socket.emit('Tom', ipt.value)
    }

    // console.log(socket, 99);</script></body></html>

浏览器rose页面

<!--
 * @Descripttion: 
 * @Author: voanit
 * @Date: 2022-11-16 15:40:30
 * @LastEditors: voanit
 * @LastEditTime: 2022-11-16 16:20:13
--><!DOCTYPE html><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>rose</title><scriptsrc="https://cdn.socket.io/4.4.0/socket.io.min.js"></script><!-- <script src="https://cdn.socket.io/4.4.1/socket.io.esm.min.js"></script> --></head><body><ul></ul><inputtype="text"name=""id="ipt"placeholder="请输入内容"><buttonid="btn">点击发消息</button><script>const btn = document.querySelector('#btn')
    const ipt = document.querySelector('#ipt')
    const box = document.querySelector('ul')

    /* 监听connect事件 */const socket = io('http://192.168.103.84:3009');
    socket.on('connect', () => {
      console.log('看到这里,表示和服务器连接上了')

    })

    /* 浏览器监听这个事件 */
    socket.on('message', (e) => {
      console.log('message', e, 8888)
      box.innerHTML = e.msg ? e.msg : e
    })

    socket.on('messageTom', (e) => {
      console.log('message', e, 8888)

      var li = document.createElement('li')
      li.innerHTML = e
      box.appendChild(li)
    })


    btn.onclick = function () {
      console.log(1111);
      /* 发射一个Tom事件 并传递数据给服务器 */
      socket.emit('Tom', ipt.value)
    }

    // console.log(socket, 99);</script></body></html>

以上实现的是:tom和rose实现聊天

tom: 点击按钮 发射一个Tom事件并携带表单输入的值给服务器

服务器:监听Tom事件 并发射事件messageTom以及携带Tom传过来的数据

rose :监听 messageTom事件即可不刷新页面就可以获取传过来的数据实现是数据实时更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值