Node.js+Socket.IO实现实时双向通信之加入房间

实现加入房间功能

上一章,我们简单的讲了Socket.IO服务端和客户端之间的双向通信,下面我们来举个简单的例子,具体了解一下。

服务端

// 导入express模块
const express = require('express')
// 引入http创建服务器实例的方法
const {createServer} = require('http')
const {Server} = require('socket.io')
// 创建express的服务器实例
const app = express()
// 创建http服务器实例
const httpServer = createServer(app)
// 创建socket.io的实例
const io = new Server(httpServer,{
    // 处理cors,解决跨域问题
    cors:{
        origin"http://localhost:3000",//需要跨域资源共享的地址
        allowedHeaders: ["custom-header"],
        credentialstrue
    }
})
// 监听客户端连接,回调函数会传递本次连接的socket
io.on('connection',(socket) => {
    console.log('连接成功!')
    const socketId = socket.id
    let clientId = ''
    let roomId = ''
    let counter = 0
    //接收来自客户端的消息
    socket.on('join_to_room',(data) => {
        roomId = data.roomId
        clientId = data.clientId
        socket.join(roomId)
        console.log(`加入房间 socketId: ${socketId},clientId:${clientId},roomId:${roomId}`)
    })

    //发送消息给客户
    setInterval(()=>{
        socket.to(roomId).emit('server_to_client',{
            message:{
                socketId,
                clientId,
                roomId,
                counter:counter++
            }
        })
    },10000)
} )


// 调用listen方法,指定端口号并启动web服务器
httpServer.listen(3001,() =>{
    console.log('server is running 3001 port')
})

客户端

执行时,clientId和roomId可以用参数指定,定义页面路由为:path: '/room/:clientId/:roomId',

<script setup>
import { io } from 'socket.io-client'
import { useRoute } from 'vue-router'
const socket = io(`http://localhost:3001`)
const route = useRoute()
const clientId = route.params.clientId
const roomId = route.params.roomId
socket.on('connect', () => {
  console.log('socket链接成功!' + socket.id)
})
// 接收服务器发送的消息
socket.on('server_to_client', (data) => {
  console.log(JSON.stringify(data.message))
})
// 向服务器定时发送消息
socket.emit('join_to_room', { clientId, roomId })
</script>

<template>
  <div style="font-size: 20px; padding: 20px">
    <div>clienId:{{ clientId }}</
div>
    <div>roomId:{{ roomId }}</div>
  </div>
</
template>

<style scoped lang="scss"></style>

在服务器端,当从客户端接收到 “join_to_room” 事件时,会加入到指定的房间中。服务器会根据指定的房间,在适当的时机通过 “server_to_client” 事件向客户端发送消息。

测试

我们可以打开两个客户端窗口,分别为A 、B

  • 服务端
Node.js+Socket.IO实现实时双向通信之加入房间
image.png
  • 客户端
Node.js+Socket.IO实现实时双向通信之加入房间
image.png

我们还可以测试多种可能,比如当:

  • clientIdA,roomId分别为1,2
  • clientIdA、B,roomId为1
    当然还有更多的可能性,比如是有第三个客户端等等。


原文始发于微信公众号(大前端编程教学):Node.js+Socket.IO实现实时双向通信之加入房间

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/224541.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!