gloox接收消息

本文介绍了使用Gloox库在XMPP协议下接收文本消息的处理流程,包括建立死循环监听、使用MessageSessionHandler和MessageHandler接口、处理XHTML扩展以及MessageSession对象的管理。通过解析Stanza获取消息内容和样式,利用Parser类将字符串内容转化为面向对象进行操作。同时,讨论了MessageSession对象何时删除以避免内存泄漏的问题。
摘要由CSDN通过智能技术生成

通过前面的描述,当和服务器建立了连接之后,就可以和服务器进行通讯了,今天先说一下接收远端发送来的文本消息的方式吧。

在接收消息之前,需要明确一件事情,就是一旦你登陆至服务器之后,随时有可能有人人给你发来消息,所以应该考虑的是你需要做一个死循环,不断的监听消息,如果有消息之后,根据消息的不同形式,处理它。当然不用担心,觉得用个死循环很影响效率,实际上做过socket的就明白了,当你调用接收消息的函数时,是会阻塞的,如果没有消息,就阻塞,这样就不会浪费资源了。另外由于阻塞的缘故,所以我们不应该在你的主进程中来做接收消息这样的事情,而是通过一个线程,来专门做消息的接收。当你连接至服务器成功之后,就可以启动一个新的线程,在这个线程中利用前面创建好的客户端实例进行消息的接收了。当然,你可以不用阻塞的方式进行接收消息,而是用非阻塞的方式,但是,我觉得做为客户端而言,用阻塞方式更好一些,对于使用非阻塞,在做服务器端时很有用,但是对于客户端而言就显得没有必要了,在我的使用中,客户端都是使用的是阻塞的方式进行接收远端文本数据的。

前面已经说明,当你连接至服务器之后,你会获得一个客户端实例对象(Client),如果一直要保持连接的话,该实例对象应该一直存在。Client这个对象提供了一个recv()的该方法,通过该方法,就可以接收来自远端的消息了(recv文法默认是阻塞的方式的,如果不需要阻塞,可以通过其参数设置就可以了)。

Gloox在接收远端发来的消息时,会调用一个接口的实现类,该接口为:MessageSessionHandler,这个接口里面提供了一个handleMessageSession( MessageSession *session ) = 0方法,当远端有文本消息发来时,Socket接收数据中会创建一个MessageSession实例对象,表明有一个会话产生(一个无端与本地的会话就有一个对应的MessageSession对象),这时如果你注册了实现MessageSessionHandler接口的实现类,则客户端Client会自动调用你的实现类中的handleMessageSession(处理消息会话)接口。HandMessageSession的函数表现形式为:

virtual void handleMessageSession( MessageSession *session )

传入的参数MessageSession

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值