2014-02-21 79 views
1

由于Google App引擎不提供Channel API的官方Python客户端API,因此我遵循此代码https://bitbucket.org/lohre/gae_channel/src/8bd89615ac83?at=defaultChannel API中的“未知SID”错误Google App Engine - Python客户端

问题是我在2-3分钟或有时立即出现“未知的SID”错误。我也寻找修复,并发现这Constant disconnects due to channels going stale for no reason

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

回答

0

当我编写Node.js模块连接到频道服务https://github.com/gelleouet/nodejs-googleapp-channel时,我遇到了同样的问题。我复制了正确运行的Java版本https://github.com/gvsumasl/jacc,并发现问题。 Service Channel系统使用在侦听套接字时发生更改的会话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 /绑定:读取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 /绑定:读取用户信息和新的sessionId(与[XX,[ “c” 的所有消息,[ 'XXXXXX',...中包含的sessionId)

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

    ]

如果您没有在步骤2中阅读正确的SID或每次读取websocket的新sessionId,则错误400 Unknow SID将始终激活。

  • 第一连接:请求1,2,3,4保持请求4活着
  • 重新连接请求4,当它接近
  • 重新连接1,2,3,4时误差401(标记无效)或有时400(未知sid)
相关问题