IM即时通讯H5端,MQTT

做IM即时通讯的成果:
成功实现了H5端和APP端之间的通信(H5和H5之间也已实现),将H5嵌入到微信小程序,并且开发了SDK使得小程序也能实时得到消息的数量和消息内容。
在这里插入图片描述

遇到的难点
(1)消息的状态、数量、内容,需要实时获取,展示在小程序端和H5端
(2)尽可能实施缓存来缓解请求压力,mqtt在小程序联调时会产生些问题
(3)聊天详情中的所有消息会经常用到循环来改变消息的状态,要解开耦合,并且要优化算法进行循环。
(4)储存问题,H5不同于后端语言,不同于原生安卓和IOS,他们有自己的储存空间并可操作。
(5)假如每个消息都有自己的生命周期,例如:开始发送、消息loading、发送成功、发送失败、消息重发、已读未读等。影响消息整个周期的因素很多,断网、网络差、丢包等等。还有各种聊天场景,也会影响到,例如息屏、切换前后台。

实现使用的技术
(1)使用的是MQTT即时通讯框架,里面会提供一些推送、订阅、失败等API
(2)需要对websocket有一定了解,MQTT就是基于ws协议
(3)用VUE实现H5页面,包括好友列表、聊天详情
(4)uniapp做的小程序,实现接入小程序的SDK文件在uni开发

以下代码是MQTT的连接,会用到的一些API,包括一些参数。(此代码不能执行,仅供观摩)

class ConnectMq {
   
	/**
	 * @param {*} publishId   推送给对方的id
	 * @param {*} clientId    自己的连接id保证唯一性
	 * @param {*} username    用户信息里面的姓名
	 * @param {*} password    用户信息里面的token
	 * @param {*} CHANNEL    不同端的不同渠道
	 */
	constructor(clientId = '', password = '', CHANNEL = '') {
   
		this.channel = CHANNEL
		this.isConnectFlag = false // 是否连接的标识
		this.clientId = clientId
		this.username = ''
		this.password = password
		this.publishId = '' // 推送给对方的id
		this.uid = '' // 接受消息的uid 通过 connect 拿到的值
		this.onmessage = '' // 响应的消息
		this.onmessageUser = '' //
		this.kdimCT = null // mqtt的实列
		this.maxReconnectNum = 0 // 最大重连次数  50次就不重连
		this.userIdArr = [] // 好友列表的所有id
		this.allstorageArr = []
		this.init()
	}

	init() {
   
		try {
   
			this.mqtt_connect() // 连接 mqtt
			this.connect() // 连接服务器
			this.message() // 监听mq的返回  响应请求
			this.reconnect() // 重连
			this.offline() // 脱机
			this.end() // 脱机
			this.close() // 监听Socket的关闭
			this.packetsend()
			this.packetreceive()
			this.disconnect(
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一段简单的AndroidMQTT代码示例: 首先,在AndroidManifest.xml文件中添加以下权限: ```xml <uses-permission android:name="android.permission.INTERNET" /> ``` 然后,在Java文件中引入以下依赖库: ```java implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5' ``` 接下来,在需要使用MQTT的地方创建一个MqttAndroidClient对象,并设置相关参数(例如服务器地址、客户ID、用户名、密码等): ```java String serverUri = "tcp://mqtt.server.com:1883"; String clientId = "android-client-id"; String username = "username"; String password = "password"; MqttAndroidClient client = new MqttAndroidClient(context, serverUri, clientId); MqttConnectOptions options = new MqttConnectOptions(); options.setUserName(username); options.setPassword(password.toCharArray()); ``` 接着,连接MQTT服务器: ```java try { IMqttToken token = client.connect(options); token.setActionCallback(new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { // 连接成功 } @Override public void onFailure(IMqttToken asyncActionToken, Throwable exception) { // 连接失败 } }); } catch (MqttException e) { e.printStackTrace(); } ``` 连接成功后,可以进行相关操作,例如发布消息: ```java String topic = "my/topic"; String payload = "Hello MQTT!"; int qos = 1; try { IMqttDeliveryToken token = client.publish(topic, payload.getBytes(), qos, false); token.setActionCallback(new IMqttActionListener() { @Override public void onSuccess(IMqttToken asyncActionToken) { // 发布成功 } @Override public void onFailure(IMqttToken asyncActionToken, Throwable exception) { // 发布失败 } }); } catch (MqttException e) { e.printStackTrace(); } ``` 以上便是一个简单的AndroidMQTT代码示例。注意,在实际应用中,需要根据具体情况进行相关参数的设置,例如服务器地址、客户ID、用户名、密码、Topic等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值