在VUE中利用MQTT协议实现即时通讯

前言

建议先阅读:
在Node.js下运用MQTT协议实现即时通讯及离线推送

以前尝试在vue中用上mqtt,了解到mqtt实质上是基于websocket进行数据通信,所以上文中在node下实现的服务端此时不能满足需求

代码

服务端: server.js

let http     = require('http')
, httpServer = http.createServer()
, mosca = require('mosca')

let settings = {
  port: 5112,
  persistence:{
      factory: mosca.persistence.Mongo,
    url: "mongodb://localhost:27017/mosca"
  }
}
let server = new mosca.Server(settings)

server.attachHttpServer(httpServer)
server.on('published', function(packet, client) {
  console.log('Published',  packet.payload.toString());
})
httpServer.listen(3003)
server.on('ready', function(){
  console.log('server is running at port 3003');  
})

服务端mosca的实例化并没有改动
而是将其为websocket形式进行适配

客户端: mqtt.js

let mqtt = require('mqtt')
let client = {}
export default {
  launch(id, callback) {
    client = mqtt('mqtt://ip', {
      port: 3003,
      clientId: id,
      clean: false
    })
    client.on('message', (topic, message) => {
      callback(topic, message)
    })
  },
  end() {
    client.end()
  },
  subscribe(topic) {
    client.subscribe(topic, {qos: 1})
    console.log('subscribe:', topic)
  },
  publish(topic, message) {
    client.publish(topic, JSON.stringify(message), {qos: 1})
  }
}

独立地对mqtt进行简单地封装,方便调用
值得注意的是此时的协议头仍为mqtt,
但mqtt源码会以ws形式进行通信

main.js:
再把mqtt绑到vue原型链上

import mqtt from './api/mqtt'
Vue.prototype.$mqtt = mqtt

现在便可在vue环境中对mqtt进行调用

this.$mqtt.launch(this.user._id, (topic, source) => {
    console.log('message: ', JSON.parse(source.toString()))
})

转载请注明出处 ; )

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值