Невозможно заставить API канала GAE работать на локальном компьютере - PullRequest
1 голос
/ 30 декабря 2010

Я создаю небольшое приложение, чтобы проверить, как работает API канала GAE. Я думаю, что я сделал все, как описано в документации, но когда я его запускаю, в журнале ошибок FireFox вначале отображается ошибка о синтаксисе, а затем еще одна повторяющаяся ошибка, что элемент не найден. Вот первая информация об ошибке:

Source: http://127.0.0.1:8080/_ah/channel/dev?command=connect&channel=channel-773698929-185804764220139124118
Line 1, symbol 1

Вот URL-адрес, где мой код JavaScript пытается повторно подключиться, и возникает вторая ошибка:

http://127.0.0.1:8080/_ah/channel/dev?command=poll&channel=channel-2071442473-185804764220139124118&client=1

Я получаю токен через JSON-запрос с jQuery $.get. Затем я запускаю этот код, чтобы получить токен и открыть канал. Ошибка начинает отображаться только тогда, когда я запускаю socket = channel.open(handler):

var response = JSON.parse(data);
        var token = response.token.toString();
        channel = new goog.appengine.Channel(token);
        var handler = {
            'onopen': onOpened,
            'onmessage': onMessage,
            'onerror': function() {
            },
            'onclose': function() {
            }
        };

        socket = channel.open(handler);

Вот код на стороне сервера в Python для открытия канала:

class OpenChannel(webapp.RequestHandler):
    def get(self):
        user = users.get_current_user()
        token = channel.create_channel(user.user_id())
        serialized = json.dumps({'token': token})
        self.response.headers['Content-Type'] = "application/json"
        self.response.out.write(serialized)

В чем моя ошибка и что я могу сделать? Спасибо!

Ответы [ 2 ]

1 голос
/ 30 декабря 2010

Кажется, что Channel API работает на localhost иначе, чем на хостинге GAE.Я загрузил его в облако, и теперь он работает хорошо.Хотя на локальном компьютере все работает нормально, в журнале ошибок повторяется постоянная ошибка JS.

0 голосов
/ 05 января 2011

Вы можете попробовать удалить аргумент обработчика и добавить обработчики как методы объекта сокета, т.е. socket.onopen = function() {}; и т. Д. Это сработало для меня.Но ты прав.Согласно this , вы должны иметь возможность заставить это работать, используя аргумент handler.Хм.

...