基于nodejs搭建Web,API服务器

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)
        }
    })
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值