在文档中它说“client_id”部分实际上可以是令牌,但是它不起作用。有谁知道为什么?
https://developers.google.com/appengine/docs/python/channel/functions
如果 client_id 参数实际上是 create_channel 调用返回的令牌,则 send_message 可用于不同版本的应用程序。例如,您可以在前端创建通道,然后从应用程序的后端发送消息。
我想使用它的原因是因为我也想向匿名用户发送消息,而不需要他们登录。如果令牌不起作用,我不知道是否可以为他们分配一个“client_id”。
这就是我创建令牌的方式
user = users.get_current_user()
if user:
token = channel.create_channel(user.user_id())
else:
token = channel.create_channel(str(uuid.uuid4()))
然后注入客户端
template_values = {
'token' : token,
}
在客户端打开通道
openChannel = function() {
var token = '{{ token }}';
var channel = new goog.appengine.Channel(token);
var handler = {
'onopen': onOpened,
'onmessage': onMessage,
'onerror': function() {},
'onclose': function() {}
};
var socket = channel.open(handler);
socket.onopen = onOpened;
socket.onmessage = onMessage;
}
现在发送消息
var xhr = new XMLHttpRequest();
xhr.open('POST', path, true);
xhr.send();
在服务器中,当收到消息时,使用令牌发回消息
channel.send_message(token, someMessage)
回客户端
onMessage = function(m) {
alert("you have some message");
}
如果在调用 send_message 时使用 client_id() 而不是 token,则此序列可以正常工作