聊天室场景
服务器启动后,客户端1 连接服务器端 并发送一条消息为:hello ,客户端1 能看到自己发送的消息。当客户端2 连接进来后 也发送了一条文字为 hello 的消息,客户端1 能接收到 客户端2 发来的消息。客户端2 亦之。
这套流程就用到了Nodejs中的net模块
简易聊天室搭建
首先建立一个服务器端文件
//引入net模块
const net = require("net")
//创建服务器
const chatServer = net.createServer()
//定义一个空对象,用来存放用户名跟消息
let clientMap = {}
// 用来记录哪台客户端发送的消息 类似于给客户端编写一个ID属性
let i = 0
//创建连接 客户端连接用
chatServer.on("connection",(client)=>{
client.name = ++i;
clientMap[client.name] = client;
//服务端发过来的消息
client.on("data",message=>{
//封装一个函数。将客户端发来的消息广播给连接到这台服务器的所有客户端
boardcast(client,message)
})
//客户端异常终止,服务器给与响应
client.on("error",()=>{
console.log(client.name + "下机了")
})
})
//服务器广播的函数封装
function boardcast(client,message){
for(var key in clientMap){
clientMap[key].write("\n" + client.name + "说" + message)
}
}
//服务器端口监听
chatServer.listen(9000)
然后建立一个客户端文件
//引入net模块
const net = require("net")
const readline = require("readline")
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
//创建client实例
const client = new net.Socket()
//连接服务端
client.connect(9000,"localhost",()=>{
client.write("hello")
})
//客户端接收服务端发来的消息
client.on("data",message=>{
console.log(message.toString())
say()
})
//往服务器发送消息
function say(){
rl.question("内容:",(str)=>{
client.write(str)
})
}
//服务器异常,报错
client.on("error",()=>{
console.log("服务器出错")
})
然后右键文件
输入nodemon server.js
没有报错,再另外打开一个终端,在新打开的终端回车输入 nodemon .\client.js
再打开一个终端,再运行一个客户端再次输入 nodemon .\client.js
至此,一个简易聊天室就搭建好了