Node中的net模块提供的前端通信
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 }` )
})
Node中的net模块提供的前端通信的更多相关文章
- 关于node中两个模块相互引用却不会死循环的问题
关于node中两个模块相互引用却不会死循环的问题 node中是通过require来导入加载模块的,require有两个作用: 1.加载文件模块并执行里面的代码 2.拿到被加载文件模块导出的接口对象 现 ...
- node中的url模块解析结果
1. URL模块作用: url 模块用于处理与解析 URL. 使用方法如下: const url = require('url'); 2. URL 字符串与 URL 对象 URL 字符串是结构化的字符 ...
- 说说对 Node 中的 fs 模块的理解? 有哪些常用方法?
一.是什么 fs(file system),该模块提供本地文件的读写能力,基本上是POSIX文件操作命令的简单包装 可以说,所有与文件的操作都是通过fs核心模块实现 导入模块如下: const fs ...
- Node中的http模块
通过Node模块,我们可以实现客户端和服务器端.这篇文章主要研究如何利用http和一些相关模块构建客户端和服务器端代码.读完本文,将能够实现client向server发送数据,而server将数据原样 ...
- Node中require第三方模块的规则
Node.js中使用CommonJs模块化机制,通过npm下载的第三方包,我们在项目中引入第三方包都是:let xx = require('第三方包名'),究竟require方法加载第三方包的原理机制 ...
- node中npm安装模块的网络问题
最近使用node开发时,发现所有的依赖模块都安装不了啦,一直报错如下 rollbackFailedOptional: verb npm-session 5a4a66a1b8d06dc3 后来才发现是由 ...
- Node中使用mysql模块遇到的问题
Node的mysql模块,本人的感受就是不好用,各种报错,各种坑,有一个问题困扰了我很久,也不知道是不是我使用的方式不对,不过后来用easymysql模块解决了,我才深信这是一个坑. 问题描述: 假设 ...
- node中的cluster模块开启进程,进程共享数据
说明:共享数据 var collection = [41, 41, 41, 41] master.js console.log('###---start---###') var cluster = r ...
- node.js中使用http模块创建服务器和客户端
node.js中的 http 模块提供了创建服务器和客户端的方法,http 全称是超文本传输协议,基于 tcp 之上,属于应用层协议. 一.创建http服务器 const http = require ...
随机推荐
- flutter编译ios的时候需要进行的操作:
pod install 执行这个命令,安装依赖
- Flutter 中使用Future消除Callback Hell
/先分别定义各个异步任务 Future<String> login(String userName, String pwd){ ... //用户登录 }; Future<String ...
- QML之信号与槽
一.C++的信号和QML的槽 前言: Qt中的信号与槽,通常是一个信号SIGNAL和一个槽SLOT,通过connet连接,而QML中不需要再写槽函数,只需要在合适的地方告诉QML:如果x信号产生则执行 ...
- vue.js 同级组件之间的值传递方法(uni-app通用)
vue.js 兄弟组件之间的值传递方法 https://blog.csdn.net/jingtian678/article/details/81634149
- 启后台JOB处理单据遇到锁定问题
/用户XXX已经处理采购凭证 9000036590 DN过账失败:/已冻结临时过账:用户 XXX已冻结编号范围 /用户XXX已经处理采购凭证 9000036589 ???问题:怎么检查采购订单正在 ...
- .NET CORE添加引用包
一 .添加服务端引用 1.直接右键添加项目引用,添加后再csproj文件中如下②,也可以直接用这种格式写入csproj文件中 2.直接右键添加DLL引用,添加后再csproj文件中如下③,也可以直接用 ...
- vim学习一
来源 实验楼(shiyanlou.com)的<Vim编辑器>课程的学习报告. 6种基本模式 普通模式 默认进入vi时的模式,使用编辑器命令,i h j k l 等等 插入模式 用户按下 i ...
- 【VS开发】fatal error C1853: "Debug\sift.pch"预编译头文件来自编译器的早期版本
fatal error C1853: "Debug\sift.pch"预编译头文件来自编译器的早期版本 <pre id="best-content-12991040 ...
- 【转帖】CRI-O 1.0 正式发布
CRI-O 1.0 正式发布 http://www.sohu.com/a/200141920_465914 CRI-O 出来之后 docker 也就可有可无了 docker创造性的提出了 将依赖关系封 ...
- [转帖]postgres csv日志和查看用户权限
postgres csv日志和查看用户权限 最近在使用postgres 时遇到的2个问题,顺便记录一下查到的比较好的资料. 怀疑postgres在执行SQL时报错,程序日志中有无明确异常信息.通过查看 ...