大家应该都想知道聊天功能到底该怎么实现 我这几天特意学了一下 发现其实不难 下面就给大家介绍一下
思路
先建立两个端口 一个用来创建聊天室我们称为a接口 一个接口是加入聊天的人我们称为b接口
这里的server.js就是用来创建聊天室的 client.js是可以加入聊天室聊天的人员
下面就来写一下接口把
1 server.js
// 聊天室
const net = require('net')
const server = net.createServer()
/**
* net.createServer()方法。
* 该方法接受一个回调函数作为参数
* 该回调函数将在每次有新的连接时被调用。在回调函数中,我们可以设置服务器的响应行为
* 例如向客户端发送消息、关闭连接等
*
*/
// 用户列表
let clients = []
// 监听连接
server.on('connection', client => {
// 我们使用client.on('data', ...)监听客户端发送的数据。
client.on('data', (chunk) => {
let data = chunk.toString()
console.log(data); // login:data
// 如果数据匹配到"login:(.*)"的格式,表示有客户端要进行登录操作。
if (data.match(/login:(.*)/)) {
// 提取用户名
let name = data.match(/login:(.*)/)[1]
// 将该用户名赋值给client.name属性
client.name = name
// 把用户传入clients数组
clients.push(client)
console.log(`用户${name}上线`);
} else {
/**
* 如果不是登录操作,即数据中不包含"login:",
* 则认为是聊天消息。我们遍历客户端列表clients,
* 对于每个客户端,判断其名字(client.name)是否
* 与消息中的名字不相同。如果不相同,则调用write方法将消息发送给该客户端。
*/
for (const client of clients) {
if (client.name !== JSON.parse(data).name) {
client.write(data)
}
}
}
})
// 我们使用client.on('close', ...)监听客户端关闭
client.on('close',()=>{
console.log(`用户${client.name}下线`);
})
// 我们使用client.on('error', ...)监听客户端发生错误
client.on('error',()=>{
console.log(`用户${client.name}发生错误`);
})
})
server.on('error',(err)=>{
console.log('服务器错误',err);
})
server.on('close',()=>{
console.log('服务器关闭');
})
server.listen(8000,()=>{
console.log('服务器开启 8000');
})
可以看做是这是一个家族群 而client.js就是这个家的家庭成员了
// 聊天人员
const net = require('net')
const readline = require('readline')
// 创建一个与用户进行交互的接口,允许用户从控制台输入信息并输出响应
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
})
// 获取名字
const name = process.argv[2]
console.log(name,111);
// 连接服务器 开始对话
const client = net.createConnection({ port: 8000 }, () => {
console.log(name + '连接到服务器');
// 使用client.write()方法向服务器发送一条消息
client.write(`login:${name}`)
// client对象的name属性设置为name变量的值,用于标识当前客户端的名称
client.name = name
// 开始发送信息
sendMsg(client)
})
// 监听服务器的数据事件
client.on('data', (chunk) => {
let data = JSON.parse(chunk.toString())
if (data) {
console.log(`[${data.name}]:[${data.msg}]`);
}
})
// 服务器断开
client.on('end', () => {
console.log('已从服务器断开');
})
// 服务器错误
client.on('error', () => {
console.log('服务器错误');
})
// 一直递归输出
const sendMsg = () => {
rl.question('', (line) => {
client.write(JSON.stringify({
name: client.name,
msg: line
}))
sendMsg(client)
})
}
功能展示
先开启聊天室
加入人员 开始聊天
这样 简单的聊天室就实现完成了 参考资料