канал appengine сообщения не приходят - PullRequest
0 голосов
/ 06 июля 2011

Я пытаюсь заставить работать api канала.Это то, что у меня есть:

в представлении:

def channel_test(channel_token):
    tries = 1
    logging.info('starting channel_test')
    for attempt in range(tries):
        message = 'this is message number: ' + str(attempt)
        channel.send_message(channel_token, message)
        logging.info('just sent: ' + message)
        logging.info(channel_token)

def viewfunc():
    channel_token = channel.create_channel('aosasdf123')
    deferred.defer(channel_test, channel_token, _countdown=10)
    return render_template('Main/cycle.html', form=form, channel_token=channel_token)

и в моем шаблоне:

<script type="text/javascript" charset="utf-8">
    function tell_user(message) {
        $('#CycleChannelMessages').append(message + '<br />');
    }

    function onOpened() {
        console.log('onOpened');
        var connected = true;
        tell_user('ready to take messages');
        tell_user('{{ channel_token }}');
    }
    function onMessage(msg_obj) {
        console.log('onMessage');
        tell_user('something');
        // tell_user(msg_obj.data);

    }
    function onError(obj) {
        console.log('onError');
    }
    function onClose(obj) {
        console.log('onClose');
    }

    var channel = new goog.appengine.Channel('{{ channel_token }}');
    var socket = channel.open();
    socket.onopen = onOpened;
    socket.onmessage = onMessage;
    socket.onerror = onError;
    socket.onclose = onClose;
</script>

Но единственный вывод, который я получаю, - это onOpen:

ready to take messages
channel-1788270053-aosasdf123

А в консоли я вижу только:

onOpened

Так что никакая другая функция не была запущена.Журналы из панели запуска appengine ясно показывают, что отложенная функция запускается и не вызывает ошибок или предупреждений.

Теперь, что я сделал не так, поскольку на входе ничего не появляется.Это на dev-сервере, кстати.Я еще не пробовал его в производстве.

Framework - это Flask, если это что-то меняет.

1 Ответ

4 голосов
/ 06 июля 2011

Вы передаете client_id send_message, а не channel_token.Таким образом, ваш код должен быть:

channel.send_message('aosasdf123', message)

Вы размещаете на стороне клиента channel_token для открытия канала и держите в секрете client_id на стороне сервера для передачи сообщений этому клиенту по каналу.

...