javascript - appengine channel 没有消息到达

标签 javascript python google-app-engine flask channel

我正在尝试让 channel API 正常工作。 这是我到目前为止所拥有的:

在 View 中:

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 启动器的日志清楚地表明延迟函数正在运行,并且不会导致任何错误或警告。

现在我做错了什么,因为前端没有显示任何内容。 顺便说一句,这是在开发服务器上。我还没有在生产中尝试过。

如果有什么不同的话,框架就是 Flask。

最佳答案

您将 client_id 传递给 send_message,而不是 channel_token。所以你的代码应该是:

channel.send_message('aosasdf123', message)

您将 client_token 放置在客户端以打开 channel ,并将 client_id 放在服务器端以通过 channel 向该客户端传输消息。

关于javascript - appengine channel 没有消息到达,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6589559/

相关文章:

Javascript - 检测刷新 - onload 和 onunload - 你能同时使用它们来检测刷新吗?

javascript - 在 Javascript 中将文本保存到文件时出现问题?

google-app-engine - 我可以从 Java 中的谷歌应用引擎部署中排除源文件吗

javascript - 如何解决图像高度对于我的动态 View 而言太大的问题?

java - 为什么电子邮件、用户名、邮政编码等作为 GAE 数据存储中的实体

android - 如何在屏幕上显示网站之前等待网站完全加载( ionic 应用程序开发)?

javascript - 在 Canvas 上裁剪视频

python - 如何递归更新列表

python - 每次为 Pandas DataFrame 获取相同的哈希值

python - 对本地文件夹中的所有文件重复 BeautifulSoup 抓取