问题标签 [channel-api]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
191 浏览

ajax - 使用 GAE 通道 API 优雅地处理封闭通道

我正在使用带有 Channel API 的 Google App Engine 创建一个 Web 应用程序。这是我第一次尝试做任何类似 Ajax 的事情,我怀疑有一种标准技术可以解决我的问题,但我一直找不到它。

我的客户端程序会将消息发布到服务器。如果消息无法发送,例如通道关闭,消息会发生什么?如果客户端在平板电脑上并且用户走出无线网络范围怎么办?对于我的应用程序,重新发送消息至关重要,但我不知道如何执行此操作。

当通道关闭时,我知道我应该从服务器请求一个新令牌,但我不知道我的客户端如何在不重新加载页面的情况下获取该令牌并打开连接(从而丢失数据)。在此处给出的演示中,客户端需要知道令牌。

但我在别处读到客户端不需要知道令牌。——这将如何运作?

此外,onerror 和 onclose 回调函数似乎没有给我失败的消息,所以我怎么知道需要重新发送什么?

如果有人能把我推向正确的方向,我将不胜感激。

0 投票
1 回答
132 浏览

java - 使用 GWT 时不相关的 Google App Engine API?

我一直在阅读 GAE 和 GWT,似乎如果您将 GWT 应用程序部署到 GAE,那么以下 API 是不必要的:

  • 页面速度
  • 频道 API

由于 GWT 已经对所有客户端代码进行了超级优化,并且包括所有必要的 AJAX 机制来生成“单页 Web 应用程序”,所以在我看来,在将 GWT 应用程序部署到 GAE 时可以忽略这两者。

我对这两个 API 的理解是 PageSpeed 有助于优化客户端代码(GWT 已经这样做了),并且 Channel API 用于长轮询(GWT 已过时)。

如果我不正确,请帮助我理解原因。或者,帮助说明 GWT 应用程序仍可从这些 API 中受益的场景。提前致谢!

0 投票
1 回答
671 浏览

google-app-engine - 谷歌频道 API 定价如何运作?

我在官方文档上读到,打开一个新频道将花费 0.01 美元。它将持续2个小时。

因此,如果我有 1000 个并发用户每天使用我的网站 2 小时。

总费用为每天 1000*$0.01 = 10$。

  • 带宽成本 + CPU 成本。正确的 ?

他们也按小时收费吗?

即如果并发用户每天使用站点 4 小时,则总成本将为 1000*0.01*2=20 美元?

0 投票
1 回答
562 浏览

java - Google App Engine UserServiceget.CurrentUser() 在 /_ah/channel/connected/ 的 servlet 处理通道连接中返回 null

我使用 Google Channel api 并在 adreess /_ah/channel/connected/ 注册了 servlet 来处理用户通道连接。当在发布消息处理程序中发生连接时,我发现 UserServiceget.CurrentUser() 返回 null,而在我的应用程序的其他 servlet 中它返回用户。请问是什么情况告诉我。servlet 代码是这样的:

安全约束是:

0 投票
3 回答
670 浏览

google-app-engine - 将 Appengine Channel API 与 DART 结合使用

是否可以将 Google Appengine Channel API 与 DART 语言一起使用?如果你能指出一些例子和陷阱(如果有的话),那就太好了。

0 投票
2 回答
952 浏览

java - 令牌过期后 Google App Engine Channel API 重新连接

我正在使用 Channel API (GAE Java SDK + GWT),并且我正在尝试为有关重新创建通道的问题创建一个解决方法(在到期日期之后以及在引发错误之后)。我发现这篇文章提供了可能的解决方案,但没有一个有效:https ://groups.google.com/forum/?fromgroups=#!searchin/google-appengine-java/channel/google-appengine-java/kD3H6BWNYuA/NivXiDrqW7QJ

我尝试在到期时间之前删除 Channel API iframe 并重新创建通道。它似乎可以工作,但是如果我重新创建一个频道,计时器不会重置,所以如果我尝试创建一个新频道并在过期期过后打开它,我会得到“onerror”和“onclose”(即使我关闭了插座)。如果我刷新页面,它可以工作,但这不是一个好的选择

此外,如果互联网连接关闭并重新打开,有时我会收到错误代码 0 或 1。这里也一样:我无法重新创建和打开新频道,因为我收到“onerror”和“onclose”。

谁能帮我提供更具体的解决方案细节?

更新:在调用 onclose/onerror 后,我使用计时器重新创建通道(5 秒),它现在可以工作了。但是在第一个令牌过期后,重新创建频道将不再起作用:(

0 投票
3 回答
988 浏览

java - 从 JavaScript 客户端到服务器的 Google Channel API 消息

过了一会儿,我得到了Google Channel API工作的第一部分。现在我在从 JavaScript 客户端向服务器发送消息时遇到了一些问题。这是Google Channel API连接的 servlet:

index.html如下所示:

如果我加载应用程序,我会收到opened警报,我相信连接正常。现在,如果有人单击该按钮,我想向服务器发送一条消息。

我读到我必须将 XMLHttpRequest 函数与 POST 或 GET 一起使用。但我不会传递一个新的 url,我只会传递一个值。有没有办法将 JSON 对象发送到服务器?

就像是:

0 投票
1 回答
398 浏览

javascript - Google App Engine Channel API Javascript 客户端:手动设置轮询计时器

我正在编写一个 Web 客户端,它使用 Google 的官方 GAE Channel API Javascript 客户端支持从 Google App Engine Java 服务器发送的消息。我想知道我是否可以手动设置我的客户端对服务器进行轮询频率的计时器,以获取来自频道的新消息。

我希望在客户端轮询之间使用较慢的计时器,因为我正在尝试使用浏览器检查工具(例如 Firefox 的 Firebug)来调试返回给客户端的消息,并且客户端的轮询发出大量 GET HTTP 请求使这变得困难。

0 投票
2 回答
504 浏览

google-app-engine - Google Channel API 向所有客户端发送消息

我创建了一个有效的 Google Channel AP,现在我想向所有客户发送一条消息。

我有两个 servlet。第一个创建通道并告诉客户端useridand token。第二个由 an 调用http post并且应该发送消息。

要向客户端发送消息,我使用:

这只会将消息发送给一个客户端。我怎么能把这个发给所有人?

我是否必须存储用于创建频道并为每个 ID 发送消息的每个 ID?如何将 ID 传递给第二个 servlet?

0 投票
2 回答
598 浏览

java - 如何对依赖于 Channel API(Google App Engine、Java)的代码进行单元测试

我有依赖于 Google App Engine 的 Channel API 的 Java servlet。我正在尝试为该代码编写单元测试,但我对如何编写存根客户端以接收来自 servlet 的响应消息感到非常困惑,而不是我总是不得不依赖使用实际网页作为我的测试客户端。我的 servlet 非常简单:

通常,我在我的测试客户端(一个网页)中阅读此内容。但是,我想编写可以使用 jUnit 或 TestNG 等框架进行测试的单元测试。在阅读了 Google关于对其 Java 服务进行单元测试的页面后,我尝试了一些方法,例如在我的测试类中使用LocalServiceTestHelper对象并使用LocalChannelServiceTestConfig对象对其进行配置。这样做的结果是我的测试类可以创建 的实例LocalChannelService,该类似乎实现与 相同的方法ChannelService

然而:

  • 两个类之间没有任何稳健的关系(不实现类似的接口,不在同一个类层次结构中......)。使我无法将 LocalChannelService 对象作为模拟对象注入到我的 servlet 中。
  • LocalChannelService API 上没有任何文档(非常感谢,Google)。
  • 他们的本地单元测试页面上也没有关于如何测试 Channel API 的文档(再次感谢 Google)

所以后来我看到了这篇关于如何在 Java 代码中进行测试的文章。ChannelService不幸的是,给出的唯一相关答案是Python。好吧,你瞧,谷歌确实为 Python GAE 服务器开发人员提供了为谷歌服务编写存根客户端的工具,正如他们的Python 本地单元测试指南中所述。令人难以置信的是,他们竟然忽略了为 Java 做同样的事情!


既然我已经摆脱了所有这些(如果我听起来有点慌张,请道歉),我真的很想知道,依赖 Google App Engine 的 Channel API 测试 Java 代码的最佳方法是什么?我真的希望依靠测试工具而不是网页。我是否必须以某种方式从 Java 调用 Google 的Javascript Client for Channel API?必须有更好的方法来使用模拟对象或存根。


更新 1

使用了更好的名称,“Google App Engine”而不是“App Engine”