App Engine频道无消息到达

0 投票
1 回答
640 浏览
提问于 2025-04-16 20:54

我正在尝试让频道 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

所以没有其他的函数被执行。应用引擎启动器的日志清楚地显示,延迟函数正在运行,并且没有出现错误或警告。

那么我到底做错了什么,因为前端什么都没有显示。这是在开发服务器上,顺便说一下,我还没有在生产环境中尝试过。

使用的框架是 Flask,如果这有什么影响的话。

1 个回答

4

你在调用 send_message 的时候应该传入 client_id,而不是 channel_token。所以你的代码应该是:

channel.send_message('aosasdf123', message)

你把 channel_token 放在客户端用来打开通道,而 client_id 则要保存在服务器上,保持秘密,用来通过这个通道给客户端发送消息。

撰写回答