Node的Socket通信和H5的Socket通信

Socket

Node-Socket

  1. 先搭建服务端server.js,引入net模块
  2. 创建服务器 const server = net.createServer(), 然后监听服务器server.listen(PORT)
  3. 连接客户端 server.on(‘connection’,( ) => { })
  4. 通过计数器来给每一个客户端命名来区分
  5. 使用data事件用来将客户端的信息展示到服务端
  6. 搭建客户端,使用const socket = new net.Socket() 连接客户端与服务端。
  7. 开始连接: socket.connect(PORT,HOST,() => {
    socket.write(‘我上线了’) // write 是发送给服务端的话
    })

  8. 使用data事件可以将客户端发来的信息展示到客户端。
  9. 客户端需要在终端能够打字才能发信息过来,所以在客户端引入模块readline(用法在nodejs官网)
  10. 将这个方法封装成一个函数,放到data事件中就可以多次发送了。
  11. 在服务端创建一个广播,展示客户端的信息。 使用for in 遍历客户端对象。然后把函数放入data事件。
  12. 判断输入词设置下线功能,中断socket和rl。在服务端监听close事件。
    13.释放服务端的对象内存delete clients[client.name]
  13. 为了防止客户端下线服务端崩溃,处理把错误做成输出,而不是抛出异常程序中断。客户端也要监听异常行为。
    //服务端代码   
   const net = require( 'net' );
   const PORT = 5000 
   let count = 0 // 用于做编号
   const clients = {} // 这个是用于保存客户端的
   //创建服务器
   const server = net.createServer() ;
   server.on('connection',( client ) => { //socket 就是客户端
   // 触发条件: 只要有客户端连接服务器就会自动触发
   
   client.name = ++count
   clients[ client.name ] = client 

   client.on('data',( msg ) => { //data事件是用来将客户端的信息展示到服务端
   console.log( `客户端${ client.name  }说: ${ msg.toString() }` )
   boardCast( msg.toString() )
   })
   client.on('error',( error ) => {
     console.log( error )
   })
   client.on('close',() => {
     console.log(`客户端${ client.name }下线了`)
   delete clients[ client.name ]
     })
   });
   // 广播boardCast 将客户端发来的信息全数展示在服务端

   function boardCast ( msg ) {
     for ( var key in clients ) {
       clients[ key ].write( `客户端${ key }说:${ msg }` )
     }
   }
   // 3. 监听服务器 
   server.listen( PORT )
        /* 
      客户端
    */
    
    const net = require( 'net' )
    // 做的是终端读取一行信息
    const readline = require( 'readline' )
    
    const socket = new net.Socket() // socket是用于连接客户端和服务端
    
    
    const PORT = 5000
    
    const HOST = '127.0.0.1'
    
    socket.connect(PORT,HOST,() => {
      socket.write('我上线了') // write 是发送给服务端的话
    })
    
    socket.on('data',msg => {
      // 停留一下 
      console.log( msg.toString() )
      say()
    })
    
    socket.on('error',() => {
      console.log( error )
    })
    
    socket.on('close',() => {
      console.log( '下线了')
    })
    
    
    const rl = readline.createInterface({
      input: process.stdin,
      output: process.stdout
    });
    
    function say () {
    
      
      rl.question('请输入:', (answer) => {
        // TODO:将答案记录在数据库中。
    
        if( answer === '886' ) {
          socket.destroy()
          rl.close()
        } else {
          socket.write( answer )
        }
    
      });
}

H5的socekt通信

  • 服务端 【socket的服务端】
  • 客户端
    • html文件
    • 服务器【只是静态服务器用来展示html5文件】
  1. 先初始化npm,然后安装express搭建服务器。
  2. 通过express创建静态服务器
    • 引入模块,搭建路由
    • 声明静态资源文件夹app.use(express.static(磁盘路径))
  3. 创建通信的服务端scoketServer.js,需要下载引入ws模块(ws是H5的一个通信协议)
  4. 使用这个模块创建服务器
  5. 创建计数器和储存客户端的对象
  6. 写客户端连接事件
  7. 处理客户端发来的信息
  8. 服务端写好之后打造自己的客户端,在客户端里面写
  9. 使用H5提供的WebScoket模块。
  10. ws.onopen()发送信息
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值