1
keakon 2010-12-07 01:55:21 +08:00
channel api没法即时同步的,因为它是基于HTTP请求驱动,而不能自发驱动的。
能做到最好的方式仅仅是用task queue来驱动,但毕竟过于麻烦了。 当然,这对用户来说完全没有区别,只是我对没有提供真正可控的长连接比较残念=。= |
2
lynncui OP @keakon 我是这方面的菜鸟,因为我今天刚看了channel api的doc,并做了一个聊天室来演练了一下,webclient的同步的确是基于http的post的,但是server不是通过socket的push方式给web client的么,为啥还不能即时同步呢,另外什么是自发驱动我也不太理解,希望可以解答一下谢谢了。
|
3
keakon 2010-12-07 02:17:27 +08:00
聊天室是“有人说话”这个POST请求来驱动server,然后server才会push message给所有人
而如果是Twitter客户端,说话者不一定是客户端的用户,可能是他关注的所有人,而这些信息是存在于Twitter网站上的,他们说话并不会驱动你的server 因此你只能让server每隔一段时间去urlfetch一次Twitter,但是这个也需要请求来驱动,于是只能让用户每隔一分钟pull一下sever,然后server去获取结果并push用户了 顺便把我的聊天室也放出来: http://chat.latest.gaejava.appspot.com/ |
4
lynncui OP @keakon 用这个来做twitter的信息同步肯定是不行的,即使不是gae,是自己完全可控的服务器,对于一些followers很多的人来说,同步也是很难完成的,因为这牵扯到很强大的数据结构和算法问题,单纯通过api基本是不可能完成的。其实我所说的同步并不是特指twitter web client,是说这个channel api在一些自己的应用中能发挥到不错的同步效果,聊天室是一个例子。另外你所说的可控的长连接是不是指守护后台的cgi?现在1.4版本似乎已经支持3个永久守护后台的cgi,而没有30秒限制了。
|
5
keakon 2010-12-07 10:11:01 +08:00
那个不叫守护进程,响应请求仍然存在30秒限制,你无法让它一直运行一个任务
只有cron和task queue可以执行10分钟,但是执行它的instance无法和响应用户请求的instance交互 |