Socket编程和node + mongoose

node + mongoose

安装

npm init -y 
npm install mongoose -S

config/index.js

//引入mongoose模块
const mongoose = require('mongoose');
//创建连接  test数据库的名称
mongoose.connect('mongodb://localhost:27017/test',{
    useNewUrlParser: true,
    useUnifiedTopology: true 
})
module.exports = mongoose

model/testModel.js

const mongoose = require("../config")
//给集合约束
const Schema = mongoose.Schema
//设置Schema约束字段,指明了集合中的字段
const mySchema = new Schema({
    username:String,
    age:Number
})

//创建集合  test > person ({username,age})
//注意:设置集合的时候需要改成复数的形式!否则数据库中集合名字就会变成复数了
module.exports = mongoose.model('users',mySchema)

index.js

//引入testModel
const testModel = require("./model/testModel")

//往person集合中插入数据
// testModel.insertMany([{username:"张三",age:18}],(err)=>{
//     if(!err){
//         console.log("插入成功!")
//     }
// })


//修改数据
// testModel.updateOne({username:"张三"},{$set:{username:"李四"}},(err)=>{
//     if(!err){
//         console.log("修改单条数据成功...")
//     }
// })


//查询数据 
//会将查询到的所有的结果返回到一个数组里面 
// testModel.find({username:'李四'},{username:1,_id:0},(err,result)=>{
//     if(!err){
//         console.log("result===>",result)
//     }
// })


//删除数据
// testModel.deleteOne({username:'李四'},(err)=>{
//     if(!err){
//         console.log("删除成功...")
//     }
// })

Socket编程

之前的所有的请求后端接口都是采用ajax方式

问题:

例如有一个奥运赛事直播,需要金牌数量实时的显示出来。

需要通过setInterval定时器,没过1s钟需要实时的向后端发起请求,后端在把金牌的数量给前端返回。(前端轮询的方式   半双工通信流程)

这种操作会大大的损耗性能,影响浏览器的效果。



我们可以通过Socket编程去实现全双工通信。主要基于服务端推送技术实现。

还可以在实时的在线聊天。

node.js里面可以依靠原生模块net实现socket编程。 在H5的浏览器里面可以借助websocket实现实时通信。

html5中可以借助ws模块实现websocket实时通讯编程。

yarn add ws

Server.js

const WebSocket = require("ws").Server;
const ws = new WebSocket({
    port:9000
})

let clientMap = {}
let i = 0

//监听客户端连接
ws.on("connection",client=>{
    client.name = ++i
    clientMap[client.name] = client
    //接受客户端发送来的消息,然后进行广播,服务端推送消息给所有的客户端对象
    client.on("message",data=>{
        broadCast(client,data)
    })
    client.on("error",()=>{
        console.log(client.name+"下线了...")
    })
})

//可以让服务端做一个广播的效果,将具体client发送的message传送给所有的客户端对象
function broadCast(client,data){
    for(let key in clientMap){
        clientMap[key].send(client.name+"说的:"+data)
    }
}

Client.js

//创建客户端实例
const ws = new WebSocket("ws://localhost:9000")

//客户端向服务端发送消息
ws.onopen = ()=>{
    ws.send("大家好!")
}

//客户端接受服务端发送消息
ws.onmessage = data =>{
    document.querySelector("#content").innerHTML += data.data+"<br/>"
}

//客户端可以监听服务端关闭,触发此方法
ws.onclose = ()=>{
    console.log("服务器关闭了...")
}

index.html

<!--引入客户端文件-->
<script src="./Client.js"></script>

开启服务nodemon Servr.js 然后打开index.html页面,控制台输入ws,发现有这个东西。

<body>
    <h1>websokect实现在线聊天室</h1>
    <div id="content" style="width:400px;height:400px;border:1px solid #ccc"></div>
    <input type="text" id="msg" style="width:200px">
    <button id="submit">提交</button>

    <script>
    	//点击提交,获取输入框的值,然后通过ws将其发送给服务端,然后服务端进行推送广播给客户端
        document.querySelector("#submit").addEventListener("click",()=>{
            let myValue = document.querySelector("#msg").value;
            //需要将myValue发送给服务端
            ws.send(myValue)
        })

    </script>
</body>
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值