栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Google App Engine频道API

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Google App Engine频道API

您链接到的Channel API
Overview中的代码已经相当完整了,只是到处都是。我承认,一旦您理解了它,我觉得它比他们看上去的要简单得多,但是我很高兴他们犯了提供过多信息的错误。

在不增加多余信息的情况下,很难为此提供一个完整的解决方案,因为您使用Channel
API的某些方式有点取决于现有应用程序的基础结构。因此,我试图对AppEngine文档提供的内容进行详细说明,以期希望您能更好地理解。如有任何疑问,您可以通过注释提出具体问题。

首先,一些词汇:

  • 频道消息: 您希望发送给客户端的消息(可能是您最初使用频道API的原因)。
  • 通道密钥: 对于用户和用户试图发送消息的范围而言唯一的字符串。
  • 通道令牌: 任何客户端唯一的字符串。每2小时每个客户1个渠道令牌。
  • 频道服务: AppEngine服务器端类,提供了一种创建频道并通过其发送频道消息的方法。

在服务器上,您将需要执行以下操作:

ChannelService channelService = ChannelServiceFactory.getChannelService();// The channelKey can be generated in any way that you want, as long as it remains// unique to the user.String channelKey = "xyz";String token = channelService.createChannel(channelKey);

获得令牌后,您只需要一些方法即可将其获取到客户端代码。您链接到的AppEngine文档通过从Java
servlet提供HTML并调用来实现此目的

index.replaceAll("\{\{ token \}\}", token)

他们的工作方式是将文字字符串

{{ token }}
放入其Javascript代码中(如下所示),因此,无论
{{ token}}
Javascript代码中出现的什么地方,它将被上述
channelService.createChannel(...)
调用生成的实际令牌替换。请注意,您
不需要 将令牌注入以这种方式提供服务的客户端代码中,但这是一个很好的起点,因为这是他们的工作方式(并记录了下来)。


现在,您已经将令牌注入到Javascript中,您需要将 带有通道令牌的代码获取到client
(请注意,如上所述,您也可以仅将令牌获得给客户端,并以此方式创建频道) 。他们拥有的代码是:

<body>  <script>    channel = new goog.appengine.Channel('{{ token }}');    socket = channel.open();    socket.onopen = onOpened;    socket.onmessage = onMessage;    socket.onerror = onError;    socket.onclose = onClose;  </script></body>

他们删节了有关如何从服务器上的文件读取此内容的详细信息,但是同样,您可以按照自己喜欢的任何方式进行操作。您还可以直接

resp.getWriter().print(index)
在JavaServlet中使用来打印String
,其中
index
是存储上面列出的HTML /
Javascript内容的String。就像我最初说的那样,最适合您应用程序现有基础架构的还有很多事情要做。

他们打算为你定义自己的Javascript函数

onOpened
onMessage
onError
,和
onClose
通道被打开时调用,收到一条消息,遇到错误,或分别关闭。您可能希望仅创建幼稚的实现以更好地了解发生了什么:

function onOpened() {    alert("Channel opened!");}function onMessage(msg) {    alert(msg.data);}function onError(err) {    alert(err);}function onClose() {    alert("Channel closed!");}

我仍然建议将它们分离为单独的功能,以便您可以更轻松地扩展它们以进行试验和解决问题。有关Javascript API的更多详细信息,请参见Channel
API Javascript
Reference。


您需要建立一种机制来 获取要从客户端发送到服务器的数据
。再一次,您希望如何操作都无关紧要。AppEngine文档建议设置一个

XMLHttpRequest
以实现此目的。

sendMessage = function(path, opt_param) {  path += '?g=' + state.game_key;  if (opt_param) {    path += '&' + opt_param;  }  var xhr = new XMLHttpRequest();  xhr.open('POST', path, true);  xhr.send();};

在这里,

opt_param
只是一串可选参数,格式为
x=1&y=2&z=3
。这是他们为示例Tic-Tac-
Toe应用程序构建的所有基础结构,对Channel API的功能并不关键;就像我说的,您可以根据需要拨打此电话。

path
是您的Servlet的路径(您需要在web.xml文件中进行设置),该路径应该处理消息的发送和接收(请参阅以下部分)。


将消息从客户端发送到服务器后,您将需要一个servlet,该servlet可以 使用相同的通道密钥将更新发送到所有客户端

ChannelService channelService = ChannelServiceFactory.getChannelService();// This channelKey needs to be the same as the one in the first section above.String channelKey = "xyz"// This is what actually sends the message.channelService.sendMessage(new ChannelMessage(channelKey, "Hello World!"));

channelService.sendMessage(...)
上面的调用实际上是发送消息的方法,因此
onMessage
上一节中定义的函数可以接收到该消息。


我希望这个答案足够完整(就此而言,是正确的),足以帮助您入门。他们放入文档中的大部分内容(以及我在此处的代码)都可以进行复制和粘贴,只需稍作调整即可。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/446998.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号