首页 > Web开发 > 详细

Node中的net模块提供的前端通信

时间:2019-07-19 01:10:56      阅读:42      评论:0      收藏:0      [点我收藏+]

标签:bsp   命令行   int   del   put   客户端   终端   地方   inpu   

  • 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模块提供的前端通信

标签:bsp   命令行   int   del   put   客户端   终端   地方   inpu   

原文:https://www.cnblogs.com/yurq/p/11210519.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 bubuko.com 版权所有 鲁ICP备09046678号-4
打开技术之扣,分享程序人生!
             

鲁公网安备 37021202000002号