博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Jabber即时通讯客户端(三)(转)
阅读量:2494 次
发布时间:2019-05-11

本文共 2978 字,大约阅读时间需要 9 分钟。

发送/接收信息
  发送信息时,使用一个元素[JPO 1.3],它使用”to”属性来标识接收者;反之,你接受包含”from”属性的元素,它标识了发送者。
  实际上,任何人都可以发送信息给别人,你不需要特定的权限就可以查看到别人的在线状态。这会造成信息的骚扰与泛滥吗?要解决这个情况,就要使程序有对信息进行筛选的能力,只允许从好友处来的信息,其他一律过滤掉。
  
Message attributes
  我们收到的任何信息都包括一个属性,它给出了信息的发送者。同电子邮件相比,它的认证更为可靠,因为这个属性是由jabber服务器端来添加的,这就减少了发送者进行欺诈行为的可能性。
  一个信息还应该包括一个元素,它标识了本次信息的主题,但显示与否取决于接收者所使用的客户端程序。
  一个信息还可以包括一个时间戳,这是用一个元素来实现的,它使用了jabber:x:delay命名空间。
  而使用jabber:x:envelope命名空间还可以提供群发的功能,这就象传统的电子邮件一样。[JPO 1.6.20]
  
The message body
  一个信息总是用元素来包含其具体内容的。[JPO 1.3.3.1]
当然也可以包含可选的元素,它将提供HTML格式的信息。[JPO 1.3.3.3]但是需要注意的是,这个格式是基于XHTML的(w3.org制定的一种由HTML向XML过渡的格式)。
  对于HTML的使用者来说,会发现XHTML与其有很大的不同,因为设计XHTML时就考虑了客户端类型的限制(譬如说手机),具体体现为缺少一些常用的HTML元素,如
及,但它们在XHTML中都有等价替代元素,如代替了旧的,但一般指定色彩或格式时,都使用CSS(Cascading Style Sheet)。
  Jabber支持加密的信息传送,它使用包含jabber:x:encrypted命名空间的元素来处理。[JPO 1.6.19]文档中对这段描述并不是很清楚,因此WellJabber并没有对加密提供支持。
  Other types of content
  与MIME不同,jabber信息并没有一个标准的格式来容纳图片或声音,这就意味着你无法在信息中包含一幅图片的数据,除非是使用超链接的形式来指示它。
  你可以随信息一起发送文件,但是文件的数据不能包含在中,而是采用超链接的方式指明可以下载的文件。
  Message types and threads
  发送的信息可以使用”type”属性来提示其显示方式,如果没有指明这个属性,信息将独立地显示在单独的窗口中。若”type=chat”则指明应使用one-to-one(类似QQ的两人世界)聊天界面来显示。此外还有”type=groupchat”,详细参见[JPO 1.3.1.1——1.3.1.4]。
  
  最后有可能出现”type=error”这样的属性值,它表明在发送一个信息时出错了(比较常见的是,发送信息给一个不存在的jabber地址)。这时的回应包含在一个元素中。[JPO 1.3.1.3]
  为帮助客户端显示信息在相应界面中,信息还可以包含一个元素,它包含一个指向信息流的唯一值,客户端发送的第一个信息就应该包括一个唯一的线程ID,而后继的信息都应该发送到此线程ID标识的同一个线程中。(JPO建议thread ID由发送者的jabber ID及当前时间以散列算法合成)
  Message event
  信息的发送者可以使用jabber:x:events命名空间来接受这样的通告,即信息的接收者是否已经查阅过本信息,或者他/她是否在进行回复。这是个全新的功能,在演示程序WellJabber中没有体现。
  Message expiration
  信息的发送者可以使用jabber:x:expire命名空间来确定信息的发送时效。[JPO 1.6.22]如果信息是离线存储的,当时效过去时,即使对方用户登录,该信息也不会发给他/她。
  
聊 天
  
  Jabber的群组聊天或会议机制允许多人同时进行交流。
  这种多人交流的方式在客户端实现时是比较复杂的,这是大家所公认的,因为有两套聊天协议在使用。群组聊天是最早采用的,而会议机制是新的,也更灵活(注意,现在只有jabber 1.4服务器版本才支持它——做为一个外接模块)。实际上,协议本身仍在不段变化,还没有最终形成标准。
  
Creating a chat room
  在产生一个聊天室前,你需要有一个聊天室名和一个会议服务。服务可以由用户来制定,或者通过发送jabber:iq:browse请求来检索。聊天室名称可以自己输入,或者编程产生(比如,产生一个随机的数字作为名称)。
  为确认聊天室名称是否已被使用,可以发送(含xmlns=”jabber:iq:browse”的命名空间)到聊天室,如果它不存在,你会收到error 404(没有找到)错误,反之,如果其已存在,你就得重新为聊天室取个名称。QQ中体现在自建聊天室这个版块。
  对于如何生成一个聊天室,有着不同的异议。编程者的实践经验是先发送presence到聊天室,如果已存在就加入它,没有则发送set请求来建立它(发送包含xmlns=”jabber:iq:browse”的命令)
  
Joining a chat room
  需要加入一个聊天室时(它的ID已经由用户指定或在接到聊天邀请时确定),首先发送一个元素。注意不要添加resource名在发送中,这是老的groupchat的做法,现在的conference已经不采用了。如果你需要向下兼容性,可以发送resource name。
  接下来,发送包含xmlns=”jabber:iq:browse”的,这个请求包含了一个或多个元素,它指明了你希望加入的会议的别名。一旦你接到一个成功回应,也就意味着你已经加入这个聊天室。
  
The chat’s roster
  每个聊天室都有个人员列表,表明当前在聊天室中的人员。它会随着人员加入或离开而改变。
  通知客户端聊天室人员的方法有很多种。首先,发给每个成员元素,在你加入这个聊天室或有其他成员改变在线状态时(更新状态、信息或是离开)。
  此外,当成员列表改变时,自己会收到一个含有jabber:iq:conference命名空间的元素,它具体包括代理服务器上的jabber ID以及当前成员的昵称。描述conference本身的是包含多个属性的元素,如果包含子元素,则标识了当前的成员们,这时通常带有”jid” 属性和”name”属性。
  又如,当一个成员加入、离开或是改变其昵称时,你就会收到一个类似的请求,它包含一个单独的元素。
  
  最后,服务器会发送一个类似“某某加入了”或“某某离开了”样式的消息。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10294527/viewspace-126322/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10294527/viewspace-126322/

你可能感兴趣的文章
期货市场技术分析02_趋势的基本概念
查看>>
期货市场技术分析03_主要反转形态
查看>>
期货市场技术分析04_持续形态
查看>>
期货市场技术分析05_交易量和持仓兴趣
查看>>
TB交易开拓者入门教程
查看>>
TB创建公式应用dll失败 请检查用户权限,终极解决方案
查看>>
python绘制k线图(蜡烛图)报错 No module named 'matplotlib.finance
查看>>
talib均线大全
查看>>
期货市场技术分析06_长期图表和商品指数
查看>>
期货市场技术分析07_摆动指数和相反意见理论
查看>>
满屏的指标?删了吧,手把手教你裸 K 交易!
查看>>
不吹不黑 | 聊聊为什么要用99%精度的数据回测
查看>>
对于模拟交易所引发的思考
查看>>
高频交易的几种策略
查看>>
量化策略回测TRIXKDJ
查看>>
量化策略回测唐安奇通道
查看>>
CTA策略如何过滤部分震荡行情?
查看>>
量化策略回测DualThrust
查看>>
量化策略回测BoolC
查看>>
量化策略回测DCCV2
查看>>