前端通信

Node中的net模块提供的前端通信
H5提供的 webSocket 【 常用于 移动端 】
pc端低版本浏览器使用 socket.io
通信
- 服务端: 总的服务器 举例: 腾讯的qq服务器 1个整体
- 客户端: 单个用户使用应用 举例: 每个人的qq 多个
 
client.js
客户端 业务:客户端现在要在终端输入内容,然后回车发送内容给服务器
解决: Node中提供了一个叫做  readline 的 模块用于读取命令行内容 【 单行读取 】
 
 
const net = require( 'net' )

const socket = net.Socket()

const host = 'localhost'

const port = 5000

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 => {
  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.end()
    }else{
    
      socket.write( answer )
    }
  });
}
 
 
//服务端server.js
const net = require( 'net' )
const server = net.createServer()
const host = 'localhost'
const port = 5000
let count = 0
const clients = {}   
server.on('connection', ( client ) => {
  client.name = ++count 
  clients[ client.name ] = client

  client.on( 'data', 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 ]
    console.log( `客户端${ client.name }下线了` )
  })

})

function boardCaster ( client,msg ) {

  for( var key in clients ){
    // clients[ key ].write( `谁说了什么` )
    clients[ key ].write( `客户端${ client.name }说:${ msg.toString() }` )
  }

}
posted @ 2019-07-18 11:11  everjin  阅读(178)  评论(0编辑  收藏  举报