如何解决群聊(MUC)聊天室重复存储、接收自己发送的消息的问题

CHENYILONG

如何#解决方案#群聊(MUC)聊天室重复存储、接收自己发送的消










































编号 项目 描述
1 问题描述
  1. 单聊没问题,群聊会出现自动回复的问题

  2. 数据库中存储的数据出现的问题

  3. 界面上出现的问题:类似自动回复。回音壁一样一模一样地回答。
 2 问题产生的原因
3 群聊基本的原理示意图

聊天内容的显示是经由从数据库进行的读取排序,

4 #解决方案# 拦截阻挡红色区域的执行


 5 失败的尝试:尝试但是没有效果的方法 //
AppDelegate.m中
#pragma 接收消息代理监听方法
-(void)xmppStream:(XMPPStream *)sender
didReceiveMessage:(XMPPMessage *)message {
XMPPJID *jid = message.to;

if([_xmppStream.myJID isEqualToJID:jid]){
      return;
     }

}
 6 正确修改的文件 /Users/chenyilong/Desktop/平安校园IM0604/平安校园IM/Classes/Other/Lib/XMPP/Extensions/XEP-0136/XMPPMessageArchiving.m
 7 正确修改的代码 -
(void)xmppStream:(XMPPStream *)sender
didReceiveMessage:(XMPPMessage *)message
{
XMPPLogTrace();

NSUserDefaults *defaults = [NSUserDefaultsstandardUserDefaults];
NSString *userName =
[defaultsstringForKey:@"userName"];

      XMPPJID *jid = message.from;
NSString *str = jid.resource;
if([str isEqualToString:userName]){
      return ;
     }

if ([self shouldArchiveMessage:messageoutgoing:NO xmppStream:sender])
{
[xmppMessageArchivingStoragearchiveMessage:message outgoing:NOxmppStream:sender];
}
}

chenyilong. Powered by https://www.evernote.com/shard/s227/sh/5e3c15b8-2fb1-4b39-b802-7f4163577351/7fc3a0de07b5865d87dede64bbd625b8

如何解决群聊(MUC)聊天室重复存储、接收自己发送的消息的问题,布布扣,bubuko.com

时间: 2024-10-23 14:14:25

如何解决群聊(MUC)聊天室重复存储、接收自己发送的消息的问题的相关文章

实现在同一台服务器上登录的ssh用户的群聊(聊天室)功能

直接上代码了,注释还算清晰,有问题欢迎提问指证. 为方便下载编译,代码都放到一个文件里了. 服务器是CentOS,客户端用的secureCRT. /* 功能: 在同一台服务器上ssh登录的用户可以群聊(聊天室) 原理:<span style="white-space:pre"> </span>1.通过roomNo.来区分不同的房间或群组: 2.以roomNo.作为key来创建一块共享内存,来保存进入到该room的用户列表: 3.用户以ssh(或其它方式)登录到服

Strophe.js连接XMPP服务器Openfire、Tigase实现Web私聊、群聊(MUC)

XMPP(Extensible Messaging and Presence Protocol)是一种网络即时通讯协议,它基于XML,具有很强的扩展性,被广泛使用在即时通讯软件.网络游戏聊天.Web聊天及Web消息推送.移动设备的消息推送等场景,例如Google的GTalk.<英雄联盟LOL>游戏聊天模块. 由于在Web浏览器上的JavaScript不能直接处理TCP协议,所以XMPP服务器通常会提供BOSH(Bidirectional-streams Over Synchronous HTT

SignalR实现在线聊天室功能(欢迎、发送、回复、私信、屏蔽)

一.在线聊天室 1.新建解决方案 SignalROnlineChatDemo 2.新建MVC项目 SignalROnlineChatDemo.Web (无身份验证) 3.安装SignalR PM> install-package Microsoft.AspNet.SignalR 4. 创建一个称为 Startup.cs 的新类 1 public class Startup 2 { 3 public void Configuration(IAppBuilder app) 4 { 5 // 有关如何

[已解决]基于WebSocket开发聊天室应用

WebSocket示例java的比较少,大部分是nodejs的,比较有名的是socket.io的chat, 借用下他的前端实现一套java的,后端基于nimbleio实现的WebSocket编写, 直接上代码: public void accept(Session session, ReadFuture future) throws Exception { if (future instanceof HttpReadFuture) { super.accept(session, future);

springmvc与+hibernate制作的一个聊天室(开源项目)

前段时间有了点空暇时间,然后某一门课要求搞一个聊天室,所以使用springmvc和hibernate搞了一个还不错的聊天室项目.页面比較精美. 多的不说了.先上图,个人觉得是精品: 登录: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjczNDQ0MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" > 注冊: watermark/2

在线聊天室的实现(4)--分布式聊天室的基础架构

前言: 前面都在讲述如何实现一个简单的聊天室, 并回顾了websocket的协议, 以及Netty 4.x的简单使用. 但如果仅局限于单机的聊天室实现, 那显然难登"大雅之堂". 借这个机会, 想尝试聊一下千万级聊天室的实现. 同时浅谈一下游戏中, 公共的聊天室资源服务定位. 本系列的文章链接如下: 1). websocket协议和javascript版的api 2). 基于Netty 4.x的Echo服务器实现  3). 简易聊天室的实现 架构演进: 这边讲述一下聊天室服务的思考过程

使用Nio实现一个简易的群聊和单聊

服务端:接收客户端发送的消息,并进行转发. package socket.demo2; import java.io.IOException; import java.net.InetSocketAddress; import java.net.ServerSocket; import java.nio.ByteBuffer; import java.nio.channels.*; import java.nio.charset.StandardCharsets; import java.uti

python2.0_day21_web聊天室一

bbs系统项目中我们用到的ajax不多,但是在聊天室里用到的全是ajax,所以本项目的主要内容就是:前端使用ajax传输json格式的数据是本节的重点以及 前端函数的的使用.http协议的特点是:短链接 ,服务器无法主动向客户端发送消息.都是客户端请求服务器返回消息.那么问题来了,WEB聊天账户如何从后台获取消息,还要求实时的.有三种方法: 1.从上述内容可知,无法实现后端把消息主动推送到前端.所以前端就要写一个定时任务.为了实现实时的获取消息,轮询的时间间隔越小越好. 2.当时间间隔很小时,就

XMPP仅借助openfire实现群聊的流程图

其实这种搭建临时聊天室的策略有种"中病毒"的意思,就好比我QQ给你发了一个exe然后你中毒了一样.我们给需要添加进聊天室的小伙伴们统一发送一条消息,同时为消息添加一个结点(相当于exe病毒),上面绑定者我们手动输入的聊天室的名字以及随之而产生的RoomJid,对方用户只要接收到就会被添加进聊天组. 其中的原因在于我们可以很便捷无误地向其他用户发送离线消息,但是离线邀请却不一定能准确送达,必须是用户在线情况下才能收到. XMPP仅借助openfire实现群聊的流程图,布布扣,bubuko