Web和API是基于不同的插件进行搭建的,Web服务器是基于ws模块,API服务器是基于net模块进行搭建的。来个服务器都是基于nodejs来搭建的。
1.搭建Web服务器
const Websockt = require('ws');//第三方插件
const ws = new Websockt.server(//构建ws服务器
port: 9000,
host: '10.31.158.42'
})
let count = 0;
const clients = {};
ws.on('connection', (client) => { //接受客户端的信息
client.name = ++count; //计数的方式
clients[client.name] = client;
client.on('message', msg => { //事件message 输出客户端的内容信息
console.log(`客户端${client.name}说:${msg.toString()}`)
boardCaster(client, msg)
})
client.on('close', () => { //客户端传过来关闭信息,销毁客户端所有名(序号)
delete clients[client.name];
console.log(`客户端${client.name}下线了`);
})
})
function boardCaster(client, msg) { //封装函数,
for (var key in clients) { //遍历所有的
clients[key].write(`客户端${client.name}说:${msg.toString()}`)
}
}
2.搭建API服务器
const net = require('net');
//net 模块用于创建基于流的 TCP 或 IPC 的服务器(net.createServer())与客户端(net.createConnection())。
const socket = net.Socket(); //创建客户端
const port = 5000;
const host = 'localhost'
const readline = require('readline'); //读取命令行
socket.connect(port, host, () => {
socket.write('hello 我上线了') //将上线信息发给服务端
})
const rl = readline.createInterface({ //监听输入内容
input: process.stdin,
output: process.stdout
})
socket.on('data', msg => { //data事件 msg拿到answer的信息然后输出
console.log(msg.toString());
say();
})
socket.on('error', (error) => { //有错误输出
console.log('error is' + error);
})
socket.on('close', () => { //客户端关闭操作
console.log(`客户端下线了`)
})
function say() {
rl.question('请输入:', (answer) => { //answer 输入的信息或者字段(二进制)
if (answer === 'bye') { //客户端的输入信息为bye时,结束客户端对话
//socket.destroy()
rl.end();
} else {
socket.write(answer)
}
})
}