在服务器端使用Socket实现群聊原理

在服务器端使用Socket

  • 准备server.js和clients.js两个文件,分别代表说服务端可客户端,代码如下:

server.js:

const net = require ('net') // 引入net模块
const server = net.createServer() // 创建server服务端

const clients = [] // 创建一个数组,用来存储客户端通信的信息
server.on('connection', clientSocket => { // 监听服务端的连接事件
    // 把当前连接的客户端通信接口存储
    clients.push(clientSocket)
    // 监听客户端的信息事件
    clientSocket.on('data', data => {
        console.log('有人说:', data.toString())
        // 把数据发给所有的客户端
        clients.forEach(socket => {
            // 排除自己
            if (socket !== clientSocket) {
                socket.write(data)
            }
        })
    })
    // 给客户端发送消息
    clientSocket.write('hello')
})

server.listen(3000, () => {
    console.log('Server running at port 3000')

clients.js

const net = require('net')
const client = net.createConnection({
    host: '127.0.0.1',
    port: 3000
})
client.on('connect', () => {
    console.log('客户端与服务器建立连接成功')

    // 监听客户端发送消费给服务器端
    process.stdin.on('data', data => {
        // 转换字符串和去空格,否则enter也是发送消息的一部分信息
        data = data.toString().trim()
        // 发送给服务端
        client.write(data)
    })
       
})

// 客户端监听data事件,当服务器发消息过来就会触发该事件
client.on('data', data => {
    console.log('服务器说:'+data.toString())
})
  • 分别打开终端执行这两个文件:

node server.js  // nodemon server.js
  • clients.js文件可以执行多次,并且输入信息,其他客户端也都能收到,如图:

在这里插入图片描述
上面就是实现基本群聊的原理

猜你喜欢

转载自blog.csdn.net/Calla_Lj/article/details/86612111