Node中的net模块提供的前端通信
2024-08-29 00:40:15
Node中的net模块提供的前端通信
客户端
业务: 客户端现在要在终端输入内容,然后回车发送内容给服务器
解决: Node中提供了一个叫做 readline 的 模块用于读取命令行内容 【 单行读取 】,readline适合动态交互式流处理,当流被创建时,readline只会监听新增的行而忽略已有的行。
const net = require( 'net' )//第一步引入内置模块net
const socket = net.Socket()//第二步创建客户端
const host = 'localhost'//定义服务器的域名
const port = 5000 //定义服务器的端口
socket.connect( port,host, () => {
socket.write( 'hello 我上线了' ) // 将一个信息发送给服务器
})
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
socket.on('data', msg => { // 客户端通过data事件展示信息,然后发送信息给服务器
console.log( msg.toString() )
say()
})
socket.on( 'error', ( error ) => { //处理错误报出
console.log( 'error is : ' + error )
})
socket.on( 'close', () => { // 客户端正常下线
console.log( `客户端下线了` )
})
function say () {
rl.question('请输入:', ( answer ) => {
if( answer === 'bye' ){
//表示正常下线
socket.destroy() // 客户端销毁
rl.close()//读取命令行关闭
}else{
//表示正常聊天
socket.write( answer )
}
});
}服务器
const net = require( 'net' ) //引入net模块,用于创建服务器/客户端
const server = net.createServer() // 创建服务器
const host = 'localhost' // 创建 域名
const port = 5000 // 创建端口
let count = 0
const clients = {} // 数组? 对象?
server.on('connection', ( client ) => { // 服务器通过connection事件连接客户端
// client指的是每一个连接的客户端
// client 是有多个 ,
// 问题: client会错乱 解决: 起名 数字编号 计数
client.name = ++count // 计数,给每一个客户端起名
clients[ client.name ] = client // 将每一个客户端放入clients中存储起来
client.on( 'data', msg => { // 服务器通过data事件来接收客户端发来的信息
// msg 就是客户端发来的信息 , msg这个信息是二进制
console.log( `客户端${ client.name }说:${ msg.toString() }` )
boardCaster( client,msg )
})
client.on( 'error', error => { // 服务器处理错误报出
console.log( 'error is: ' + error )
})
client.on( 'close', () => { // 服务端接收客户端正常下线行为
delete clients[ client.name ] // 从存储client的地方删除下线的客户端
console.log( `客户端${ client.name }下线了` )
})
})
// 我们需要将所有客户端发来的信息全部展示在服务器界面上【 聊天室 】 -》 广播
// 广播就是将所有的客户端以及客户端发来的信息展示在服务端界面上
function boardCaster ( client,msg ) { //广播的函数
for( var key in clients ){
// clients[ key ].write( `谁说了什么` ) // 写信息在服务端
clients[ key ].write( `客户端${ client.name }说:${ msg.toString() }` ) // 写信息在服务端
}
}
// 监听服务器
server.listen( port,host,() => {
console.log( `服务器运行在: http://${ host }:${ port }` )
})
最新文章
- 20145229&;20145316 《信息安全系统设计基础》 实验二 固件设计
- HDU 1513 Palindrome(最长公共子序列)
- 推荐一个linux下的web压力测试工具神器webbench
- 用PHP实现定时器功能
- 虚幻4以及DX12将允许开发者利用Xbox One的更多性能(转)
- CentOS7.1 JDK安装 和 CentOS7.1配置yum源
- DevTools:Chrome 内置调试工具
- Unity SendMessage方法
- Linux系统编程(1)——文件与I/O之C标准I/O函数与系统调用I/O
- UESTC_冬马党 CDOJ 882
- IE浏览器打印的页眉页脚设置解决方法
- JS(总结)
- ubuntu系统备份与恢复-remastersys方法
- C# ExecutionContext 实现
- redis性能提升之pipeline
- VS Code 快捷键使用小技巧
- 理解for循环
- react面试问题总结
- Elections CodeForces - 1020C (贪心)
- Gitlab-system-hooks
热门文章
- 123457123456---熊猫猜谜语02(儿童猜谜语大全)--com.threeObj03.CaiMiYu02
- AFN使用etag进行网络缓存
- 【Leetcode_easy】733. Flood Fill
- 35个高级Python知识点总结
- 字符串匹配算法---BF
- python 模块import(26)
- SpringBoot中使用 RabbitMQ -测试
- socket网络编程 的基本方法:--ongoing
- vue-cli webpack打包后加载资源的路径问题
- Docker部署Gitlab11.10.4