Chinaunix首页 | 论坛 | 博客
  • 博客访问: 195126
  • 博文数量: 31
  • 博客积分: 2595
  • 博客等级: 少校
  • 技术积分: 334
  • 用 户 组: 普通用户
  • 注册时间: 2008-07-28 16:03
个人简介

知行合一

文章分类

全部博文(31)

文章存档

2015年(1)

2014年(1)

2010年(9)

2009年(20)

我的朋友

分类: 系统运维

2009-06-11 14:25:23

注:以下文章如需转载,请注明所属作者,转载地址,谢谢!

4Google wave机器人:概览(Google Wave Robots:Overview

机器人是wave上面的一个自动化的参与者。它可以读取其加入的wave中的内容,修改wave的内容,添加或删除参与者,并且创建新的blips和新的waves。简而言之,机器人可以做其他任何参与者可以做的事情。

 

你也可以使用机器人来进行下面的动作:

l         修改wave中的信息

l         wave中的参与者进行交互

l         与外界进行沟通并将wave中的信息同步到外部或其他的wave

l         访问或修改第三方中的状态(例如数据库)

你能做的事情远远不止列出的这些。随着我们对API能力的扩展,机器人将能够充分利用这些新的特性。

客户端库资源(Client Library Resources

Google wave机器人的开发需要一个合适的客户端库。我们目前有JAVAPython编程语言的客户端库。

参考此链接你可以获得更多关于其的信息。

机器人标识(Robot Identity

机器人(相对于配件来说)可以使用wave wire protocol发送HTTP请求,接收响应来动态的加入wave。你不必详尽地了解这个协议,只需要使用我们提供的javapython客户端库就可以创建和管理你的机器人。

目前,wave支持使用大规模web应用环境Google App Engine来构建机器人。AppEngine使用application.appspot.com web地址来表示web应用程序。当你使用AppEngine创建了机器人,你也就在上定义了一个HTTP接口。当同robot沟通时,wave将使用这个地址(同时这个地址也隐含的定义了一个机器人)。

JavaPython客户端库允许你设计你的机器人而不用担心如何处理和管理个人的HTTP请求。因为这时一个早期的开发版本,代码在将来可能会发生变化。然而,客户端库已经被设计的相当稳定了。如果你希望直接使用wire protocol,那么可以免费使用,但是需要知道的是,这个协议在未来也可能会改变。

使用者(或UI扩展[UI extension])能够像添加任何其他参与者一样将机器人加入wavelet Engine应用程序ID来作为它的wave参与者地址。例如,如果一个机器人的App Engine应用程序IDparrotybot,那么这个robotwave参与者地址就是parrotybot@appspot.com。你可能注意到了,机器人使用类似email地址的方式被添加,但是wave API使用的是HTTP的机制来同robot联系。

Note:对于这个开发前瞻版,所有的wave机器人必须要以google app engine应用程序的方式实现。将来的版本会介绍以任何web host,任何web地址来加入机器人的能力方法。

机器人的能力(Robot Capabilities

你可以通过定义你所希望你的机器人被告知的事件来定义它的行为。当这些事件中的某个或某些发生时,wave会去联系机器人,譬如在机器人是其中的参与者的wave中所作的一些变化。机器人在capabilities.xml配置文件中声明其关心的事件,这个文件在机器人第一次添加入wave的时候被wave获取。

一个capabilities.xml文件的例子显示如下:

xml version="1.0"?>
<w:robot xmlns:w="">
  <w:capabilities>
    <w:capability name="wavelet_participants_changed"/>
  w:capabilities>  
w:robot>

请注意,这个文件包含了一个由一个或更多的元素组成的单独的元素。每一个含有该机器人向wave说明的其感兴趣的一个事件。当这种类型的事件发生时,wave将向机器人分发一个HTTP请求。

Capabilities文档不仅仅描述了机器人处理的事件,而且好包含了一些诸如标识机器人为一个wavelet参与者的概括信息,例如它的名字和头像。每一个机器人机器人都要以下面的URL地址来serve它的配置文件。

http://applicationURL/_wave/capabilities.xml

机器人事件(Robot Events

下面的事件是机器人可以订阅的,很重要:

l         Wavelet_blip_created 当一个新的wave blip被创建时,该事件发生

l         Wavelet_participants_changed 当一个参与者(包含其它的一个机器人)被加入wave或从wave中被删除时,该事件发生

l         Wavelet_title_changed wavelet标题改变时,该事件发生

l         Blip_contributors_changed blip的编辑者发生改变时,该事件发生

l         Blip_deleted 当一个blip被从wavelet中删除时,该事件发生

l         Blip_submitted 当一个blip被提交时,该事件发生。注意:这个事件只有当使用者点击Done或移向另一个blip是才发生。

l         Document_changed 在各种间隔中将内容添加进blip时,该事件发生。

除了事件驱动外,机器人还可以通过在配置文件中指定日程来请求wave以有规律的间隔与它进行联系。这些cron事件允许机器人可以不针对wave的改变直接作出响应动作,譬如,由从外部系统带来的新的信息来更新wave这种改变。

注意机器人不恩那个直接的联系wave;它只能对wave相关的时间和cron事件作出响应。

当一个事件发生时,wave使用HTTPPOST方法向机器人应用程序发送HTTP请求(当有人提交一个web表单时使用的也是POST方法)。当联系机器人时,所有的针对wave数据改变的事件要使用下面的URL路径:

http://applicationURL/_wave/robot/jsonrpc

wave上的该URL发出的每一个请求对于一个单独的wavelet可以封装不止一个的事件。新近的事件可以被一起捆绑。当机器人收到一个事件时,它能够决定是否(怎样)在一个操作中封装响应信息进行响应。

操作(Operations

来自waveweb请求包含一个或多个事件的信息。机器人可以携带说明信息来进行响应去更新其属于的任何wave,或是通过wave事件系统中的操作(operations)来创建新的wavelet

机器人可以在其所在的wavelet上执行操作,也可以创建新的waveletwave。被执行的操作不会被机器人报告回那些执行动作的机器人,不过会报告给其他的受到影响的参与者,包括机器人。

操作按照它们被接收的顺序被处理,机器人相对于其他的使用者不会有任何特殊的优先级别。机器人操作被送到wave并且异步地的被执行;不能确保其他的参与者不会在间隔时间执行它们自己的操作。所以,尽量保持你的操作的原子性,并且要理解的是你应用到wave上的操作可能不会立刻被应用。Wave是一个能够记录历史的实体,wave的内容包含它原是的内容加上在数据上发生的累积操作。

JavaPython应用程序客户端库为处理事件和执行操作提供了完整的接口。例如,java事件处理使用web servlet来响应wave请求,将事件数据解析成对象,然后对于每一个事件调用servlet上的一种方法。该方法对代表wave数据模型(wave data model)的对象进行操作产生操作动作(operations)。当方法返回时,servlet将所有的操作动作发送回wave以应用到该数据。

Note:收到的事件数据和发出的操作数据的格式(format)是wave机器人wire protocol的一部分。在本开发前瞻版本的发行期间,wire protocol的细节可能会改变。一旦该协议稳定了,我们将发布详细说明书来描述消息格式。在此期间,你能够使用javapython客户端库来解析事件并产生操作。

机器人概要(Robot Profiles

机器人还有各种附加到他们上面的元信息。你可以使用下面的HTTP请求向机器人请求信息:

http://applicationURL/_wave/robot/profile

默认的机器人不提供概要信息。为了提供这个信息,在java中,你还必须添加profile servlet到你的应用程序,该程序使用该数据进行响应。在python中,你在机器人初始化时要提供这块的信息。

阅读(1245) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~