当前位置: 首页 > 面试题库 >

Google App Engine频道API

胡高朗
2023-03-14
问题内容

我正在尝试学习GAE的通道API(使用Java),但是我不知道从哪里开始。

我经历了Channel API
Overview(Java),
但为简洁起见,此处发布的代码并不完整。

而且由于我是新手,如果可以使用完整的示例代码,这将非常有帮助。

谢谢,Shrey


问题答案:

您链接到的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函数onOpenedonMessageonError,和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上一节中定义的函数可以接收到该消息。

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



 类似资料:
  • HTTP接口文档 频道集成信息接口 GET /activity/api/integrated_info?actid=xxxx URL 参数 参数 描述 取值 是否必填 actid 频道HashID string 必填 返回 参数 描述 取值 errcode 错误码 int msg 错误信息 string name 频道名称 string description 频道描述 string visibl

  • RSS频道 可将透过RSS技术传输内容的Web网页登录为频道。RSS传输的内容,包含了新闻影像、专栏、电台节目等各种类型,且在网络上被广泛地公开。 可将频道登录至以下其中一个位置: - Memory Stick™     - 主机内存   登录频道 保存内容 streaming播放声音内容 浏览图像 使用定时设定机能 输入opml档案 选项选单 关闭RSS频道

  • 那么,如何从“由YouTube自动生成”(主题)的频道获取发布的视频呢?https://www.youtube.com/channel/UCSkJDgBGvNOEXSQl4YNjDtQ/videos 我可以从频道调用中获取主题ID,但当我按此主题ID搜索时,得到的结果完全不同。 如果我运行搜索api调用: 我只得到播放列表和频道。无视频结果。

  • 我正在尝试将一个基于PHP的API从共享主机移植到Google应用程序引擎。我下载了PHPSDK,在启动器中创建了一个新的应用程序,在PHP中启用了cURL。ini(使用),现在我得到这个错误: 如果我向curl_init()添加反斜杠(告诉它不要使用MyNamespace),我会得到这个: 除了启用cURL_lite()(稍后我可能会解决这个问题,因为它不支持我需要的cURL选项),我如何解决这

  • 我正在制作一个discord机器人,我希望它在加入新公会时发送消息。 但是,我只想让它在它加入的公会的通道中发送消息: 我注意到的问题是只返回服务器的第一个通道的名称。我想通过所有渠道迭代,最后只在渠道上发送消息。 它的变通方法是什么?

  • 登录频道 1. 启动网络浏览接口。 若要将频道登录至Memory Stick™,需先将Memory Stick™正确插入PSP™内。 2. 开启正在传输支持RSS之内容的Web网页。 3. 从Web网页中选择代表RSS传输的图示。 请遵循画面指示,登录频道。登录后的频道会被保存至Memory Stick™或主机内存。 使用RSS频道指南 使用RSS频道指南,会显示RSS传输网站的网址集、检索网页。

  • 2.4 频道终止 2.4.1 描述 通过调用该接口终止指定的域名的加速服务。 2.4.2 请求地址 地址:https://api.bokecs.com/channel/delete/{channelId} 2.4.3 请求方式 POST 2.4.4 请求参数 1) 请求入参 channelId 频道唯一标识 2)请求出参 { "code": "", "message": "" } code:接口

  • 2.2 频道修改 2.2.1 描述 通过调用该接口为指定的域名修改频道回源、缓存策略、访问控制信息。 2.2.2 请求地址 地址:https://api.bokecs.com/channel/modify/{channelId} 2.2.3 请求方式 POST 2.2.4 请求参数 1) 请求入参 { "domain": { "origin_type": "", "orig