Nereid聊天模块

openlabs_nereid_chat的Python项目详细描述


基于浏览器的聊天1.0
======


本文档描述了
nereid使用的聊天系统背后的协议。我们四处寻找一个可能的标准,根据这个标准我们可以编写一个在浏览器中工作的聊天应用程序。搜索是徒劳的,这是一个试图编写一个受xmpp启发的通用实现来处理基于浏览器的聊天。简介
----

<1.1概述
~~~~~~~~~~~~~~~~~~~


>此协议是一个流式json协议,用于近实时交换消息和状态信息。


1.2要求
~~~~~~~~~~~~~~~~~~

1。与大多数浏览器兼容。
2.与代理兼容
3。与http/1.0完全兼容。
4.容错
5.可扩展
6.多间客房

2。概念
----



2.1身份验证
~~~~~~~~~~~~~~~~~~~~

此协议不定义其自身的任何身份验证机制,但
将其留给底层http层。

2.2 thread
~~~~~~~~~~~


>thread用于跟踪两个
实体之间的会话线程
(有时称为"即时消息会话")的标识符。


系统中的每个会话、单个用户或一组
用户(muc)在线程中发生。当向
个人或用户组发起新消息时,如果给定用户中不存在
线程,则创建线程。线程id不必是可读的。

3.节的语法
---------


实现的基本语义和公共属性概述如下。

代码::js

{
"时间戳":"2011-02-10t15:04:55z",
"节":[
{
"类型":"消息"
"消息":{
"主题":"对话的可选主题",
"文本":"消息"GE正文"
"类型":"普通",
"语言":"英语",
"附件":[
],
"id",
"线程":"线程id",
"发送方"{
""url":"http://example.org/martin"、
"objecttype":"person"、
"id":"tag:example.org,2011:martin"、
"foo2":"some other extension property"、
"image":{
"url":"http://example.org/martin/image",
"width":250,
"height":250
},
"displayname":"martin smith"
},
},
},
{
"type":"presence"
"presence":[
{
"entity":"nereid.user,123",
"show":"chat",
"status":"Happy Day",
"Available"":true,
},{
"entity":"nereid.user,13",
"show":"dnd",
"status":"busy in a meeting",
"available":true,
}
],
"}
]




>3.1消息节用于将信息推送到另一个实体。在聊天对话上下文中发送的消息以消息节的形式发送给收件人。


3.1.1 subject
………


subject属性包含人类可读的数据。指定消息主题的。属性是可选的

3.1.2 text
………



消息的内容。该属性是可选的,并且该类型的默认值
假定为"plain"。可能的值为:

*`plain`
*`html`
*`rst`


3.1.4 language
……………


language`属性用于帮助识别
中的人类语言,该语言是由消息的文本内容组成的。该语言是根据ietf最佳实践指定的,由"rfc
5646"和"rfc 4647"指定,便于计算机进行分析。
语言的一个例子是"en-us"(美国使用的英语(美国是
iso 3166-1美国国家代码)


3.1.5附件
生成的uuid v4应该足够了。

3.1.7 thread
……………


thread属性包含非人类可读字符数据,指定用于跟踪两个实体之间的会话线程(有时称为"即时消息会话")的
标识符。
thread属性的值由发送方生成,应在任何
回复中复制回。

如果保留为空,则服务器实现可以决定消息是现有会话的
继续,还是可以为此目的创建新会话。


如果使用,则它必须是流中该会话线程的唯一,并且在整个会话中必须保持一致(接收来自同一发送者但具有不同线程ID的消息必须假定
有问题的消息存在于现有会话的上下文之外



3.1.8发送者
………



大量信息代码::js

{
"时间戳":"2011-02-10t15:04:55z",
"类型":"消息"
"消息":{
"主题":"对话的可选主题",
"文本":"消息正文"
"类型":"普通","语言":"英语","附件":[
],
"id":",
"thread":"thread id",
"sender":{
"url":"http://example.org/martin",
"objecttype":"person",
"id":"tag:example.org,2011:martin",
"foo2":"some other extension property",
"image":{
"url":"http://example.org/martin/image",
"width":250,
"height":250
},
"displayname":"martin smith"
},
},
}


当前网络可用性
(脱机或联机,以及后者的各种子状态和可选的
用户定义的描述性文本),并将此
可用性通知其他实体。与xmpp presence节不同,它**不**用于协商
和管理对其他实体的存在的订阅。web
假定应用程序有自己独特的方式来处理订阅。能够进行通信。



3.2.2 show
………



可选属性包含非人类可读字符数据,这些数据指定实体或特定资源的特定可用性状态。

*away--实体或资源暂时离开。
*chat—实体或资源对聊天非常感兴趣。
*dnd—实体或资源正忙(dnd="请勿打扰")。
*xa—实体或资源已离开一段时间
(xa="已离开")。


3.2.3状态
………


status元素包含指定可用性状态的自然语言描述的字符数据。它通常与show元素结合使用,以提供可用性状态的详细描述(例如,"在会议中")。


3.2.4 entity
………




3.2.5示例存在性代码::js

{
"type":"presence"
"presence":[
{
"entity":"nereid.user,123",
"show":"chat",
"status":"a happy day",
"available":true,
},{
"entity":"nereid.user,13",
"show":"dnd",
"status":"busy in a meeting",
"available":true,
}
],
}



4.聊天令牌
----

>4.1概述
~~~~~~~~~~~~~~~~~~~~~

>授权令牌在不使用基于nereid cookies的登录的情况下获取聊天流。

<4.2使用无会话令牌
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

quiet通常是大型应用程序的一部分,g根据单页应用程序的新趋势,您可能希望在没有会话的情况下使用chat
功能。为了实现相同的功能,这个模块提供了一个api,其中一个访问令牌最初由登录用户生成,然后可以专门用于订阅聊天消息、通知和发送新消息。

这个令牌不能用于任何其他请求。

。。注意:



由于可扩展性的原因,聊天令牌存储在redis
中,ttl为1小时。



4.2.1生成聊天令牌
………


代码:

post/nereid chat/token



响应:

……代码:

http/1.1200 ok

{token':'550e8400-e29b-41d4-a716-446655440000'}



4.2.2使用token订阅流
使用下面显示的
特殊处理程序订阅事件流。与常规流处理程序不同,
此处理程序需要一个令牌。

…代码:

get/nereid chat/stream/<;token>;

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Grid loadmask(true)在gxt中不起作用   java将字符串索引转换为整数   为什么Java泛型适用于基元数组,但不适用于基元数组?   java如何让Azure应用程序服务Tomcat将所有80/443流量转发到运行在同一应用程序服务上的JBoss   具有多个值的java转换映射到树?   java如何设置SQL server连接URL?   java设置了多个相互独立的JFrame   安全性在JAVA中如何使用RSAPrivateKey的密码短语?   java不能使用比Apache Velocity中更大的条件   如何在Java中打印字符串的所有排列   停止Android Studio自动导入java。sql。日期   对象简单计算器程序java   java如何在安卓中使用“&”符号作为字符串?   java Connect,为我的安卓应用程序从REST API发布和获取数据