Channel API Google App Engine中的“未知SID”错误 - Python客户端

时间:2014-02-21 20:15:07

标签: python google-app-engine channel-api

由于Google App引擎不为Channel API提供官方python客户端API,因此我遵循了此代码https://bitbucket.org/lohre/gae_channel/src/8bd89615ac83?at=default

问题是我在2-3分钟后或有时立即收到“未知SID”错误。我也找了解修复程序并找到了这个Constant disconnects due to channels going stale for no reason

但是,建议的解决方案适用于JavaScript客户端。有人可以看看代码并指导我如何摆脱这个错误。我想关闭连接并重新启动会起作用(如建议的那样),但我也无法做到。任何帮助表示赞赏!!谢谢!

1 个答案:

答案 0 :(得分:0)

当我编写Node.js模块以连接到频道服务https://github.com/gelleouet/nodejs-googleapp-channel时,我遇到了同样的问题。我复制了正常工作的Java版本https://github.com/gvsumasl/jacc,我发现了问题。服务通道系统使用在侦听套接字时更改的会话ID。如果未正确读取新值,则此错误“Unknow SID”将触发每个通道重新连接。这方面有几个步骤:

  1. GET / talkgadget / d:读取clientId和sessionId(参见http响应)

    var a = new chat.WcsDataClient("https://talkgadget.google.com/talkgadget/",
    "",
    "957778AE55824F5D", // clientId
    "Nnc1-h3uIHY", // sessionId
    "1394484158",
    "WCX",
    "AHRlWrpfZ3LMYkQU8bjBsHNPApz7SB71Sc00N5Ug"
    );        
    
  2. POST / talkgadget / dch / bind:读取SID和新的sessionId(参见http响应)

    [[0,["c","290B58E8BA60D97F",,8] // 290B58E8BA60D97F is SID
    ]
    ,[1,["b"]
    ] // 957778AE55824F5D is new sessionId
    ,[2,["c",['957778AE55824F5D', ["ei","E4jToU4lPn0","1394484158",0,28800000,57600000,28800000] 
    ]]
    ]
    ]
    
  3. POST / talkgadget / dch / bind:无事可做。

  4. GET / talkgadget / dch / bind:读取用户消息和新sessionId(所有消息都带有[xx,[“c”,['xxxxxx',...包含sessionId)

    [[147,["c",['957778AE55824F5D',["cds",1395328474416]
    ]]
    ]
    

  5. 如果您没有在步骤2中读取正确的SID,或者每次读取websocket时都没有读取新的sessionId,那么错误400 Unknow SID将始终触发。

    • 第一次连接:请求1,2,3,4。保持请求4活着
    • 关闭时重新连接请求4
    • 当错误401(无效令牌)或有时400(未知sid)时重新连接1,2,3,4