Неизвестная ошибка SID в Channel API Google App Engine - клиент Python

Поскольку движок Google App не предоставляет официальный клиентский API Python для Channel API, я выполнил следующий код https://bitbucket.org/lohre/gae_channel/src/8bd89615ac83?at=default.

Проблема в том, что я получаю ошибку «Неизвестный SID» через 2-3 минуты, а иногда и сразу. Я также искал исправление и обнаружил, что это Постоянное отключение из-за на каналы, которые становятся устаревшими без причины.

Однако предлагаемое решение предназначено для клиента JavaScript. Может кто-нибудь, пожалуйста, посмотрите код и посоветуйте мне, как мне избавиться от этой ошибки. Я предполагаю, что закрытие соединения и перезапуск сработают (как было предложено), но я тоже не могу этого сделать. Любая помощь приветствуется !! Спасибо!!


person Shikha Shah    schedule 21.02.2014    source источник


Ответы (1)


У меня была такая же проблема, когда я написал модуль Node.js для подключения к службе каналов https://github.com/gelleouet/nodejs-googleapp-channel. Я скопировал версию Java https://github.com/gvsumasl/jacc, которая работает правильно, и обнаружил проблема. Система служебного канала использует идентификатор сеанса, который изменяется во время прослушивания сокета. Если новое значение плохо читается, то эта ошибка «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: чтение сообщения пользователя и нового идентификатора сеанса (все сообщения с [xx, ["c", ['xxxxxx', ... содержат идентификатор сеанса)

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

    ]

Если вы не читаете правильный SID на шаге 2 или новый sessionId при каждом чтении веб-сокета, то всегда возникает ошибка 400 Unknow SID.

  • Первое соединение: запрос 1, 2, 3, 4. Оставить запрос 4 активным.
  • запрос повторного подключения 4, когда он закрывается
  • переподключить 1, 2, 3, 4 при ошибке 401 (недопустимый токен) или иногда 400 (неизвестный sid)
person user1966813    schedule 20.03.2014