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