官方文档没有提到支持,但我想知道是否可以连接客户端程序而不是javascript来使用Channel API.我目前正在使用Windows应用程序的基本轮询技术,使用Channel API可以提高响应速度并减少负载.
我认为,作为一个丑陋的黑客,我可以在后台渲染一个隐藏的webbrowser对象,并在其中运行javascript,然后以此为基础.有更好的解决方案吗?
我在AppEngine上构建了一个社交网络/约会类型应用程序,目前我正在添加一个建立在Channel API之上的聊天.但是,我遇到的问题是用户可能会在聊天过程中重新加载或导航到新页面(就像在Facebook中一样).这意味着服务器不容易知道它是否应该为给定客户端生成新的通道ID令牌,或者是否已经为给定客户端分配了通道令牌.
如果有一种方法可以检查(服务器端)特定客户端是否已打开某个频道,那将非常有用.例如,如果我为客户端"Jack"分配了一个"Jack-Jan-21-2010"的频道ID,那么我希望能够在服务器端检查是否已经有一个与该ID相关联的频道"杰克-JAN-21-2010" .这可以通过观察onerror()和onclose()回调在客户端进行跟踪(但有点),但我看不到任何服务器端允许我只检查与给定ID相关联的通道已经开放了.
在使用AppEngine Channel API时,是否有人知道检查(服务器端)是否已打开某个频道的智能方法?
我正在开发一个不在AppEngine上的应用程序,并且具有聊天功能,可以放入通信Web客户端(浏览器+ javascript)和移动客户端(ActionScript).我正在考虑在AppEngine上使用XMPP协议(然后在Google上只使用服务器进行聊天功能,并将其余部分留在我的服务器上).你告诉我这是否可能?与Channel API有什么不同?谢谢
我正在尝试学习GAE的通道API(使用Java),但我无法弄清楚从哪里开始.
我浏览了Channel API Overview(Java),但为了简洁起见,那里发布的代码并不完整.
因为我是新手,如果有完整的示例代码,那将非常有用.
谢谢,Shrey
我在我的python项目中使用App Engine模块.(https://developers.google.com/appengine/docs/python/modules/#Python_Background_threads)
我也在m项目中收到电子邮件:https: //developers.google.com/appengine/docs/python/mail/receivingmail
我想将电子邮件定向到我的工作模块而不是默认模块.为此,我的worker.yaml具有以下设置
worker.yaml
api_version: 1
application: integrate
module: worker
version: 1-0-0
runtime: python27
threadsafe: true
inbound_services:
- mail
builtins:
- deferred: on
handlers:
- url: /admin/.+
script: src.worker.main.app
login: admin
- url: /_ah/mail/.+
script: src.worker.main.app
login: admin
- url: /.*
script: src.worker.main.app
Run Code Online (Sandbox Code Playgroud)
的app.yaml
api_version: 1
application: integrate
version: 1-0-0
runtime: python27
threadsafe: true
builtins:
- deferred: on
handlers:
- url: /admin/.+
script: src.default.main.app
login: admin
- url: /.*
script: src.default.main.app
Run Code Online (Sandbox Code Playgroud)
我甚至尝试添加dispatch.yaml
application: integrate …
Run Code Online (Sandbox Code Playgroud) 如何在非JavaScript客户端上使用Google App引擎通道API进行COMET.
我将用python或任何其他语言编写客户端,并且可以从客户端执行HTTP或Socks.
我该如何处理,我想知道JavaScript客户端支持中发生了什么?
JS是使用长轮询还是与GAE服务器交谈的内容.
希望Moishe看到这一点:在开发模式中,通道api客户端(javascript)采用轮询...并使用非常快的轮询速率.在探索之后我发现如果我设置
goog.appengine.Socket.POLLING_TIMEOUT_MS = interval;
Run Code Online (Sandbox Code Playgroud)
我可以控制投票率.我想知道的是:
-谢谢
在我的GAE应用程序(Python)中,我基于host
请求对象的一部分实现了多租户和多站点支持.
例如,www.foo.com/index.html
并且www.bar.com/index.html
都由相同的应用程序处理(例如myapp.appspot.com
).应用程序读取主机值,然后决定使用哪个命名空间和站点配置.只要应用程序直接从用户代理接收请求,这就很有用.
但是,我想使用Channel API,但是存在一个问题,因为请求来自原始用户代理/_ah/channel/connected/
并且/_ah/channel/disconnected/
不是来自原始用户代理.相反,请求具有Host: myapp.appspot.com
参数to=myapp.appspot.com
.(该from
参数是我期望的令牌.也www.foo.com/_ah/channel/jsapi
被重定向到一个没有记录的talkgadget服务器,但似乎是预期的.)
我假设,问题是由channel.js
不使用原始主机调用我的应用程序的代码引起的,例如www.foo.com/_ah/channel/connected
.相反,它使用一个talkgadget.google.com
主机(据我所知)将调用我的应用程序,但使用myapp.appspot.com
,忽略原始主机,所以我不能使用请求的host
值为我的目的.
作为一种解决方法,我可以想出一种将主机信息包含在通道令牌中的方法,因此当我connected
和disconnected
处理程序收到令牌时,他们可以使用令牌代替.
但是,我想知道是否有更好的方法,我仍然可以获得原始主机名(例如www.foo.com
)请求/_ah/channel/connected/
和/_ah/channel/disconnected/
.有任何想法吗?
这是我到目前为止所尝试过的(没有任何成功):
将自定义域主机名添加到JS src属性:
<script type="text/javascript" src="//www.foo.com/_ah/channel/jsapi"></script>
Run Code Online (Sandbox Code Playgroud)
我还尝试手动覆盖通道套接字的base-url,建议如下:https://stackoverflow.com/questions/16558776/google-app-engine-channel-api-same-origin-policy
<script type="text/javascript">
onOpened = function() {
// TODO
};
onMessage = function() {
// TODO
};
onError = function() {
// TODO …
Run Code Online (Sandbox Code Playgroud) 我想在我的GAE应用程序和iphone之间尝试使用channel-API.我不知道从哪里开始......我应该尝试使用运行javascript的UIWebView吗?
我的Google App Engine应用程序使用Channel API在某些时候运行良好.但是,间歇性地,连接到通道的js代码会产生错误.在socket.onError中,错误代码设置为400,描述设置为空字符串.我已经检查过用于连接的令牌是否有效.我也尝试在socket.onError中重新创建通道,首先调用socket.close(),但这似乎不起作用.通常在成功之前会出现一系列失败.客户端js正在iOS上的Safari上运行.任何有关如何解决或解决问题的想法都将受到欢迎.现在,我最好的解决方法是继续尝试直到我成功,增加每次失败尝试之间的间隔.服务器端存在API没有帮助,因为没有可靠地调用'connected'钩子.