标签: channel-api

HTTP获取204无内容:这是正常的

HTTP GET请求是否正常出现响应状态代码204 - No Content?就像,这对于HTTP GET应该完成的内容来说,这在语义上是否正确?我知道一个HTTP POST请求204 - No Content可以的.对于GET请求,如果没有数据要发回,204状态代码是否合适?我应该使用404,还是仅仅坚持200以获得成功但是空洞的回答?

此问题的用例是我为Google App Engine编写的Java应用程序.我正在向servlet发送请求,但要发送回客户端的数据将通过Channel API套接字而不是HTTP Response传输.目前,我的客户端在请求正文中发送没有内容的POST,并在轮询Channel API套接字之前等待来自servlet的204响应.因为我没有在请求正文中发送数据,所以我在辩论发送GET而不是POST是否更有意义.

google-app-engine get http http-status-codes channel-api

42
推荐指数
4
解决办法
8万
查看次数

渠道API存在不会触发

我正在尝试使用Channel API中的Presence来处理断开/连接状态.

这是我的一些代码.

的app.yaml

handlers:
- url: /(.*\.(gif|png|jpg|ico|js|css))
  static_files: \1
  upload: (.*\.(gif|png|jpg|ico|js|css))

- url: .*
  script: main.py

inbound_services:
- channel_presence
Run Code Online (Sandbox Code Playgroud)

main.py

class onConnect(webapp.RequestHandler):
  def post(self):
    for user in users:
      users = User.all().fetch(1000)
      client = client_id = self.request.get('from')
      channel.send_message(user.channel,' connected');

class onDisconnect(webapp.RequestHandler):
  def post(self):
    Mainpage()
    for user in users:
      users = User.all().fetch(1000)
      client = client_id = self.request.get('from')
      channel.send_message(user.channel, ' disconnected');

application = webapp.WSGIApplication(
                                     [('/', MainPage),
                                     ('/_ah/channel/connected/',onConnect),
                                     ('/_ah/channel/disconnected/',onDisconnect),
                                     ('/chat',handleChat)],
                                     debug=True)
Run Code Online (Sandbox Code Playgroud)

使用Javascript

<script>
        openChannel = function(){
            var token = '{{ token }}';
            var …
Run Code Online (Sandbox Code Playgroud)

python google-app-engine channel-api

36
推荐指数
1
解决办法
734
查看次数

25
推荐指数
1
解决办法
1万
查看次数

谷歌应用引擎渠道api限制

我已经使用谷歌应用程序引擎约2年了,并喜欢它.我的任务是制作游戏,我想用GAE作为后端.根据我的理解,Channels API适用于此类应用程序.我得到了tic-tac-toe演示,并注意到每个客户都有自己的频道.在仔细阅读文档之后,我注意到这就是系统的使用方式.然后,我检查了文档中的配额和限制,并且......被毁坏了.GAE将让我每分钟创造60个新频道.这意味着我每分钟只能有60个新用户.这是限制我无法使用此API.

所以我的问题是:

  1. 我做对了吗(1个客户= 1个频道)
  2. 通道API是用于更新多个客户端有关游戏当前状态的最佳API.
  3. 它真的不能只有60!?我可以每分钟支付更多费用吗?

google-app-engine channel-api

18
推荐指数
1
解决办法
5353
查看次数

Google Cloud上的实时游戏:渠道API还是计算引擎?

我们需要开发一款具有实时性能的多人游戏.这需要在全球范围内运行(美国,欧洲,亚洲的服务器),并支持巨大的流量.使用Google Cloud服务进行托管.

我们正在考虑使用Jam with Chrome,Chrome Maze或Cube Slam等参考文献.

游戏 :

  • 2名球员挑战比赛
  • 我们需要同时显示2名球员的进展
  • 每场比赛可持续约30至45秒

托管:

我们显然会在AppEngine上主持网站,自动扩展,但正在考虑为实时服务器提供2种解决方案:

  1. 使用带有计算引擎的websocket服务器

    就像他们为Jam with Chrome,Maze等所做的那样.
    开发我们自己的websocket服务器(技术TBD),部署在欧洲,美国,亚洲的数据中心,处理扩展,在它们之间同步,计算服务器上的延迟问题和客户端等,
    但它是非常技术上的挑战,因为我们的时间很短,和失踪管理员SYS和网络家伙现在.

  2. 或使用Channel API

    我们知道它不是websocket平台,实时性能较低.
    但对我们和我们拥有的时间来说,这将更加简单和安全.
    所以,我们也希望了解更多相关信息.

在任何情况下,我们认为我们可以在前端使用一些图形技巧,使其看起来像实时,但它确实取决于我们有100~500ms或500ms~10s的延迟.

一些问题 :

  • 对于不同的解决方案,延迟范围值会是什么样的?
    (带有GCE的Chrome与Chrome有100ms的距离,Channel API可以达到几秒钟吗?)
  • Channel API服务器如何处理高流量,缩放如何工作,延迟是否会非常高?(没有关于频道文档的信息?)
  • 如果法国有人在美国与某人玩,连接到不同的服务器,等待他们同步,如何处理它会怎么样?
  • 有什么建议或经验可以分享吗?
  • 有趣的阅​​读或观看?(看到一些但不是很精确)
  • 还有其他方法吗?

感谢您的任何帮助评论!

编辑:

  • 只有2名球员连接在一起,可能来自不同的世界区域,不需要广播.
  • 我们可以找到一些前端技巧来避免服务器端处理.这是两个玩家之间的比赛,所以我们实际上只需要比较他们的进展,真正的赢家分辨率并不重要,因为没有真正的东西可以获胜,这更有趣.

google-app-engine websocket channel-api google-compute-engine

16
推荐指数
1
解决办法
5897
查看次数

Google App Engine中最佳的渠道池方法

似乎使GAE Channel API具有财务可行性的唯一方法是实现某种池化机制(其中一位高级应用程序引擎产品经理甚至告诉我这一点,当我通过电子邮件向他们发送关于价格过高的价格时)来重用尚未使用的渠道过期.

我一直在集思广益,以实现渠道池,但我认为每种方法都有一些非常严重的缺点.

Servlet的静态内存 - 很好,但是当新VM实例打开和/或客户端从一个VM传递到另一个VM时,会丢弃相当多的开放通道.

Memcache - 至少可以从所有VM全局访问内存,但现在由于不活动和内存压力,可能会丢弃一个非常可行的通道.

后端实例 - 可能性是可靠性方面的最佳选择,但现在运行后端的费用将耗尽首先实现池的所有节省!

是否有更好的地方/方式在虚拟机上实现我缺少的通道池,或者我是否不必要地在这里选择我的选项的缺点?我真的希望有,或者看起来我的应用程序将不得不恢复到轮询(在我的初步指标中看起来略微便宜).

google-app-engine channel pooling channel-api

15
推荐指数
1
解决办法
2211
查看次数

App Engine Python模块和频道服务

我在我的python项目中使用App Engine模块.(https://developers.google.com/appengine/docs/python/modules/#Python_Background_threads)

我也在m项目中使用频道:https://developers.google.com/appengine/docs/python/channel/

我想将连接/断开的帖子消息('/ _ah/channel/connected /','/ _ah/channel/disconnected /')指向我的api模块.现在我无法让它们显示在任何模块中(默认或api)

的app.yaml

    api_version: 1
    application: integrate
    version: 1-0-0
    runtime: python27
    threadsafe: true

    builtins:
      - deferred: on

    libraries:
      - name: pycrypto
      version: "2.6"

    handlers:
      - url: /favicon\.ico
      static_files: static/favicon.ico
      upload: static/favicon\.ico

      - url: /admin/.+
      script: src.default.main.app
      login: admin

      - url: /.*
      script: src.default.main.app
Run Code Online (Sandbox Code Playgroud)

api.yaml

    api_version: 1
    application: integrate
    module: api
    version: 1-0-0
    runtime: python27
    threadsafe: true

    inbound_services:
      - channel_presence

    builtins:
      - deferred: on

    libraries:
      - name: pycrypto
      version: "2.6" …
Run Code Online (Sandbox Code Playgroud)

google-app-engine module python-2.7 channel-api gae-module

10
推荐指数
2
解决办法
1836
查看次数

使用Google App Engine的大量多用户实时应用程序

我正在使用Google App Engine(Python)构建一个多用户实时应用程序,它看起来像Facebook livestream插件:https://developers.facebook.com/docs/reference/plugins/live-stream/

这意味着:同一网页上的1到1 000 000个用户可以执行立即通知其他人的操作.这就像群聊,但有很多人......

我的问题:
- App Engine 能够扩展到那种数字吗?
- 如果是的话,你会如何设计它?
- 如果不是,你的建议是什么?

现在,这是我的设计:
- 我正在使用App Engine Channel API
- 我将每个连接在memcache中的用户存储起来
- 每次执行操作时,都会向任务队列添加一个通知任务
- 任务包括检索所有用户来自memcache并向他们发送通知.

我知道我的瓶颈在于任务.通过相同的任务/请求通知每个人.目前,对于连接的30个用户,它持续约1秒,因此对于10万用户,您可以想象可以花多长时间.

你怎么纠正这个?

非常感谢

google-app-engine real-time multi-user channel-api

9
推荐指数
1
解决办法
2548
查看次数

通道API通道在没有onclose或onerror调用的情况下断开连接.JavaScript控制台包含对talkgadget.google.com的HTTP调用失败的日志

我已在我的应用程序中实现了Google App Engine的Channel API功能.一切顺利.我为每个用户每隔一小时创建一个新频道.我设法在每个会话中维护一个通道(浏览器中不同选项卡的通道相同).我已经实现了onerror和onclose方法,每次调用它们时,都会向服务器发出一个请求有效令牌的调用.

有时,在频道活了一段时间后,它会断开连接.我可以在JavaScript控制台上看到对talkgadget.google.com的HTTP调用失败.URL是这样的:

https://129.talkgadget.google.com/talkgadget/dch/bind?VER=8&clid= .....

这些调用具有诸如"401(令牌超时)"或"401(令牌无效)"之类的响应.确实如此,客户端使用的令牌无效.它应该使用新令牌进行更新,但不会调用onerror或onclose方法.我怎么知道这会发生什么时候或如何处理呢?除了onerror或onclose方法之外,没有真正的方法可以说明客户端是否断开连接.如果我刷新页面,则会解决此问题(每次用户刷新时,我都会从数据库中获取有效令牌).

我检查了套接字对象的"readyState"属性,它的值为1.有许多人面临这个问题,截至目前,GAE的人们似乎没有提供有效的解决方案.

编辑:我是高级帐户持有人,此问题阻碍了我们的部署.

编辑2:每个标签有一个频道可以减少发生这种情况的频率.但它并没有完全解决问题.

google-app-engine channel-api

9
推荐指数
1
解决办法
363
查看次数

Android Wear ChannelApi的例子?

最新的Android Wear更新支持ChannelApi,可用于向/从可穿戴设备或手持设备发送文件.问题是我找不到如何使用此功能的单个示例.Android示例不包含此功能.因此,如果有人知道如何使用sendFile/receiveFile并且可以在这里给出一个快速示例,那将不胜感激.

channel-api wear-os

9
推荐指数
1
解决办法
2399
查看次数