利用node之socket搭建简单聊天室

一、理解socket

socket是client和server进行连接,消息传送的桥梁;

这里写图片描述


二、 node中server的socket

node通过net.createServer((socket) => {})创建server,其中回调函数的参数为socket,建立连接后即可使用socket;

const net = require('net');

//创建一个socket服务器
const server = net.createServer((socket) => {
    // 建立连接后触发以下程序
    console.log('建立连接');
    socket.write('hello client');

    socket.on('data', (data) => {
        console.log(data.toString());
    })
    socket.on('end', () => {
        console.log('连接中断');
    })
});

server.on('error', (err) => {
    throw err;
})

server.listen(2080, '127.0.0.1', () => {
    console.log('server监听成功');
})



三、node中client的socket

client通过net.createConnection({port: 2080, host: ‘127.0.0.1’}, () => {});创建client,这个client就是socket

const net = require('net');

const client = net.createConnection({port: 2080, host: '127.0.0.1'}, () => {
   // 客户端创建连接之后触发
    console.log('客户端连接成功');
    // 通过socket给server发送消息
    client.write('hello server');
})

client.on('data', (data) => {
    // 通过socket接受server的消息
    console.log(data.toString());
    client.end();
})
client.on('end', () => {
    console.log('连接中断');
})


四、在shell中使用

这里写图片描述
这里写图片描述



五、server端进行广播(http协议雏形)

思路:1、定义数据格式,利用json字符串进行传递;
对于多个客户端,用数组sockets剩放所有client连接;
在server.js中:

const net = require('net');

//存储所有连接的client
const sockets = [];

// 创建一个socket服务器
const server = net.createServer((socket) => {
   sockets.push(socket);
   function boardcast(from, message){
       sockets.forEach((element) => {
           element.write(`你好呀${from}, 你说的是${message}`);
       });
   }

    socket.on('data', (chunk) => {
        //规定chunk的数据结构为: {portocal: 'boardcast', from: 'client', message: 'hello'}
        try {
            var data = JSON.parse(chunk);
            switch(data.portocal){
                case 'boardcast': 
                console.log('收到消息');
                boardcast(data.from, data.message);// 有任何客户端发消息都会有触发,对每个client进行广播
                break;
                default:  socket.write('你说的格式我不识别');
            }
        } catch (error) {
            console.log(error);
        }    
    })
});

const port = 2080;

// 监听一个特定的端口
server.listen(port, (err) => {
    // 监听端口成功后调用,如果监听失败则是端口被调用
    if (err){
        console.log('端口被占用');
        return false;
    }
    console.log(`server成功监听${port}`);
})

在client.js中

const net = require('net');

const signal = {"portocal": "boardcast", "from": "jinghong", "message": "hello"};

const client = net.createConnection({port: 2080, host: '127.0.0.1'}, () => {
    console.log('client已经连接');
    client.write(JSON.stringify(signal));
});

client.on('data', (data) => {
   console.log(data.toString());
})
client.on('end', () => {
    console.log('连接关闭');
})

运行测试:打开一个终端运行server.js;多个终端运行client;

这里写图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,要搭建一个多人聊天室,可以使用node.js的socket.io库来实现。下面是一个简单搭建过程: 1. 安装Node.js和npm(Node.js自带npm,无需另行安装) 2. 在命令行窗口中使用npm安装socket.io: ``` npm install socket.io ``` 3. 创建一个服务器文件server.js,然后在其中引入socket.io: ```javascript const http = require('http'); const socketIO = require('socket.io'); const server = http.createServer(); const io = socketIO(server); // 监听客户端连接事件 io.on('connection', (socket) => { console.log('a user connected'); }); server.listen(3000, () => { console.log('listening on *:3000'); }); ``` 4. 在客户端HTML文件中引入socket.io,并连接服务器: ```html <script src="/socket.io/socket.io.js"></script> <script> const socket = io(); </script> ``` 5. 在客户端代码中监听服务器发来的消息,并发送消息给服务器: ```javascript // 监听服务器发来的消息 socket.on('message', (msg) => { console.log('received message: ' + msg); }); // 发送消息给服务器 socket.emit('message', 'hello'); ``` 6. 在服务器代码中监听客户端发来的消息,并广播给所有客户端: ```javascript // 监听客户端发来的消息 socket.on('message', (msg) => { console.log('received message: ' + msg); // 广播消息给所有客户端 io.emit('message', msg); }); ``` 以上是一个简单的多人聊天室搭建过程,您可以根据实际需求进行扩展和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值