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