Socket

Socket

Node-socket

服务端(server)
  • 客户端编号,每次连接递增,一个号对应一个客户端
  • 存储客户端的为对象
const net = require( 'net' )
const PORT = 5000 //端口号
let count = 0 // 用于做编号
const clients = {} // 这个是用于保存客户端的

// 1. 创建服务器
const server = net.createServer() 

// 2. 连接客户端
server.on('connection',( client ) => { //client 就是客户端
  // 触发条件: 只要有客户端连接服务器就会自动触发
  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 )
客户端(client)
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( '下线了')
})

//用户端命令行输入信息---console的底层调用的是process.stdout
// readline 模块的基本用法。
const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

function say () {
  rl.question('请输入:', (answer) => {
    // TODO:将答案记录在数据库中。
    if( answer === '886' ) {
      socket.destroy() //关闭连接
      rl.close() //关闭接口实例 (Interface instance), 放弃控制输入输出流。
    } else {
      socket.write( answer )
    }
  });
    
}

H5-socket

通信的服务端(socketServer)
  • ws : 是H5的一个通信协议
    • 第三方,需要安装 :$npm i ws -S
    • 通信协议包括
      • http
      • https
      • tcp
      • ws
const WebSocket = require( 'ws' )  

const server = new WebSocket.Server({
  port: 8000,			//端口号
  host: '10.31.153.38'  //ip地址
})

const clients = {}		//保存客户端的对象

let count = 0	//客户端计数

server.on('connection',client => { // 触发条件: 只要有客户端连接服务器就会自动触发
  client.name = ++count 
  clients[ client.name ] = client 
  client.on('message', msg => {  //从客户端接收到的信息
    console.log( msg )
    borderCast( msg )
  })
    // 下线通知
  client.on('close',() => {
    console.log(`客户端${ client.name }下线了`)
    delete clients[ client.name ]
  })
})

 function borderCast ( msg ) {
   for ( var key in clients ) {
     clients[ key ].send(`客户端${ key }说: ${ msg }`)
   }
 }
客户端服务端(clientServer)
const express = require( 'express' )
const app = express()
const PORT = 5000  //端口号
const HOST = '10.31.153.38' //域名、ip地址
const path = require( 'path' )
// 配置静态资源目录
// app.use( express.static(目标目录的磁盘路径))
app.use( express.static(path.join( __dirname,'client')))//应用级中间件
app.get('/',(req,res,next) => {
  res.send('你好')
})
app.listen( PORT,HOST,() => {
  console.log( `客户端服务器运行在:http://${ HOST }:${ PORT }` )
})
客户端(webClient)
  • H5 本身就提供了一个WebSocket
const ws = new WebSocket('ws://10.31.153.38:8000') 

// 发送信息
ws.onopen = () => {
  ws.send('欢迎xxx来到xxx的直播间')
}
ws.onmessage = ( msg ) => { // 它是将服务端的信息展示到客户端
  var content = document.querySelector('#content')
  content.innerHTML += msg.data + '<br/>'
}
index(简易聊天室)
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>WebSocket</title>
    <script src="./webClient.js"></script>  <!-- 引入客户端  -->
</head>
<body>
    <h1> 聊天室 </h1>
    <div id="content" name="name" style="overflow-y: scroll; width: 400px; height: 300px; border: solid 1px #000"></div>
    <br />
    <div>
        <input type="text" id="msg" style="width: 200px;">
    </div>
    <button id="submit">提交</button>
</body>
<script>
    var submit = document.querySelector('#submit')
    var msg = document.querySelector('#msg')
    submit.onclick = function() {
        var val = msg.value
        ws.send(val)
        msg.value = ''
    }
</script>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值