由于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客户端。有人可以看看代码并指导我如何摆脱这个错误。我想关闭连接并重新启动会起作用(如建议的那样),但我也无法做到。任何帮助表示赞赏!!谢谢!
答案 0 :(得分:0)
当我编写Node.js模块以连接到频道服务https://github.com/gelleouet/nodejs-googleapp-channel时,我遇到了同样的问题。我复制了正常工作的Java版本https://github.com/gvsumasl/jacc,我发现了问题。服务通道系统使用在侦听套接字时更改的会话ID。如果未正确读取新值,则此错误“Unknow SID”将触发每个通道重新连接。这方面有几个步骤:
GET / talkgadget / d:读取clientId和sessionId(参见http响应)
var a = new chat.WcsDataClient("https://talkgadget.google.com/talkgadget/",
"",
"957778AE55824F5D", // clientId
"Nnc1-h3uIHY", // sessionId
"1394484158",
"WCX",
"AHRlWrpfZ3LMYkQU8bjBsHNPApz7SB71Sc00N5Ug"
);
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]
]]
]
]
POST / talkgadget / dch / bind:无事可做。
GET / talkgadget / dch / bind:读取用户消息和新sessionId(所有消息都带有[xx,[“c”,['xxxxxx',...包含sessionId)
[[147,["c",['957778AE55824F5D',["cds",1395328474416]
]]
]
如果您没有在步骤2中读取正确的SID,或者每次读取websocket时都没有读取新的sessionId,那么错误400 Unknow SID将始终触发。