问题标签 [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.
java - SocketTimeoutException 使用 URLFetch 到发送通道消息的服务
我们有两个 AppEngine (Java) 应用程序。其中一个使用 URLFetch 到另一个来创建约会。在接收器中,我们添加了一个功能,我们使用 Channel API 查看是否有任何打开的通道并让他们知道新数据。
URLFetch 调用失败并出现 SocketTimeoutException。接收器中的所有代码都已执行(包括通知所有打开的通道),但调用应用程序仍会收到 SocketTimeoutException。当我注释掉频道通知行时,没有错误。
这只发生在已部署的应用程序中,而不是在开发模式下。此外,调用不会接近 URLFetch 允许的 60 秒(甚至旧的 10 秒)超时。
java - 如何实现连接/断开(GAE Channel API,Java)?
这是我的 app.yaml 的相关部分:
但 App Engine 似乎既不识别 ChannelDisconnected 也不识别 ChannelConnected。开发服务器 (SDK 1.6.1) 的输出:
和网络日志:
google-app-engine - GAE 通道 API 重新连接
我正在 GAE 及其 Channel API 之上开发一个聊天应用程序。我研究了文档和提供的示例,还查看了这里的一些答案,但我仍然不觉得我拥有 clientId/token 机制的全貌。
1)。令牌发行了 2 个小时,所以当它到期时,我必须申请一个新的。我还将使用客户端 ID 参数在我的处理程序上获得断开连接。那么这是否意味着通道在那时关闭并且通过请求新令牌我基本上是在创建一个新通道?因此,那时我可以使用什么客户端 ID(旧的还是全新的)都无关紧要?GAE 还会将此视为正在创建的新频道吗?
2)。如果用户在令牌到期之前离开我的页面(我将收到断开连接)。然后回来(仍然在那个 2 小时窗口内),我可以用旧令牌将他重新连接到同一个频道(假设我在 cookie 中有它们)?如果是,那么 GAE 不会将此视为正在创建的新频道吗?
3)。如果上述问题的答案是肯定的,那么我是否可以在服务器端垃圾收集断开连接的客户端 ID 和令牌并将它们分发给新连接的客户端。在这种情况下,如果用户回到我的页面并且他的旧客户端 ID/令牌已被其他人使用,他将简单地从池中接收另一对。或者这就是每页一个频道的规则生效的地方?
预先感谢和欢呼,Aleksei
google-app-engine - 通道 api 中的消息失败
我在 localhost 上运行一个 gae Web 应用程序。我已成功从 goog.channel 生成令牌并将其发送给客户端。客户端能够接受令牌并尝试打开连接的位置。问题是,我正在从我的 servlet 类发送一条消息,而客户端没有发生任何事情。
以下是我的代码:
服务器端:
Javascript:
从 channelservice 发送消息时没有异常。客户端也在反复向我的服务器发出获取请求:
这里发生了什么错误?提前致谢。
google-app-engine - Getting Channel Client ID for RequestFactory requests
Is there any way to get the Channel ID on the server or transmit it inside a RequestFactory call?
Situation:
- User starts the application, a channel is being opened.
- User persists an entity with RequestFactory (
requests.persist().using(...).fire(...)
). - The
persist()
method on the server pings all connected clients to tell them that the entity has been updated.
But the user that made the initial change doesn't have to be pinged. Is there a way to find out which client made the change? It's not enough to know the user, because one user may have opened several windows (channels).
google-app-engine - GAE 与客户端的双向通信(Java / iOS 客户端的通道 API 替代方案,或者 XMPP)?
我想在跨平台移动客户端(Android、PC - 用Ja va编写和 iOS 用Objective-C编写)和我的 Google AppEngine(Java)服务器之间实现双向通信。它应该:
- 允许每一方发起通信(在客户端连接后)。
- 具有相对较短的延迟(每 X 秒轮询一次是有问题的,据我了解,因为它在 AppEngine 上,所以不能长时间轮询 http 请求)。
- 支持最多只有几 KB 文本的消息,而且通常要小得多。
我曾考虑将 Channel API 与一些反向工程 Java 客户端一起使用,但这似乎是在冒险(因为它不受官方支持)。另外,我什至不确定是否有针对 Objective-C 的解决方案,而且我不想自己深入研究并实现它。
然后我考虑使用 XMPP。但是,我不确定如果不让我的用户输入 Jabber 帐户,这是怎么可能的,我不能(通信在后台)。有没有办法为我的客户创建一个临时用户?
C2DM 似乎也不是一个好的选择。它不是跨平台的,看起来很注重“通知”而不是交流,并且不保证消息传递的成功。
或者也许有一种我没有想到的完全不同的方法?这种类型的交流对我来说相对较新。
谢谢!
编辑:
由于我正在寻找后台通信,我想到了一个新选项:单个 XMPP 用户,资源作为客户端标识符。这意味着,我将为我的应用程序创建一个 XMPP 用户(例如:“AppBackgroundUser@domain.com”),并让客户端使用他们自己的唯一 ID 作为资源(“AppBackgroundUser@domain.com/UNIQUEID” )。这种方法是否有任何缺点或严重的安全漏洞?
google-app-engine - 在 Chrome 和 FF 中关闭选项卡时未调用 Channel API /disconnect 入站服务
每次用户登录我的应用程序时,我都会创建套接字连接。这意味着如果他们在同一浏览器窗口中打开新选项卡,则会为每个浏览器选项卡建立多个套接字连接。当我关闭这些选项卡时出现问题;不一致地调用 /disconnect 入站服务。这意味着对于某些连接 /disconnect 不被调用,而对于某些它被调用。我无法始终如一地重现这一点(有时它称为 /disconnect 有时它不是)。
我依靠 /disconnect 来清理为特定通道创建(存储在数据存储中)的临时对象,因此我留下了从未调用 /disconnect 的所有 OpenChannel 对象。
Chrome 和 FireFox 会发生这种情况,而 IE 则不会。我是否正确使用 API?每个浏览器窗口而不是选项卡是否应该有一个套接字连接?(如果是这种情况,那么如果我们将令牌存储在 cookie 中,我们是否会重新建立与该令牌的连接?这不会算作每个客户端 ID 的两个连接吗?
谢谢。
python - 使用 Google App Engine 的 Channel API 和开发服务器时出现 JavaScript 错误
我正在编写一个使用 Channel API 的 Python GAE 应用程序,除了在使用开发服务器时在 Firefox 错误控制台中出现非致命浏览器错误之外,一切正常。每个 Channel API 应用程序基本上都是一样的,所以我将展示我在示例 Channel Tac Toe 应用程序中看到的内容。
它以语法错误开始,其中显示的源代码始终只是数字“1”:
接下来是“格式不正确”的错误(仅在 Channel Tac Toe 中):
然后我得到一连串无休止的“找不到元素”错误,大约每秒三个:
此后,尽管我的实际应用程序运行没有问题,但 Channel Tac Toe 表现不佳(双方都想成为 X 播放器)。
请注意,因为这些都是 JavaScript 错误,所以没有堆栈跟踪。
(a) 是什么导致了这些问题?尽管我的应用程序可以运行,但这些错误降低了我的信心。
(b) 无穷无尽的“未找到元素”消息是一个真正的问题,因为它们使得很难看到其他 JavaScript 错误。
我遇到过同样问题的另一份报告,但后续行动无济于事。
我的配置:Windows 7、Firefox 10.0.2(禁用附加组件)、GAE 1.6.2
python - 使用 Channel API 时是否可以将 token 和 client_id 都传递给客户端?
我需要创建一个应用程序,GAE 服务器将始终只与一个客户端通信(即一条消息应该始终只发送给一个客户端)。
我执行以下操作 -
Python:
Javascript:
它运行良好,但在这种情况下,两者都token
被client_id
传递给客户端。可以吗?
python - 如何在 GAE 回复中实施延迟?
一旦我收到来自客户端的消息,我不想立即回复,我想等待几秒钟(随机秒数)。我该怎么做?(我使用 Channel API,所以这样的延迟对客户端来说应该没问题)