【发布时间】:2013-02-17 23:50:07
【问题描述】:
在文档中说“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() 而不是令牌,则此序列可以正常工作
【问题讨论】:
-
“它不起作用”不是很具有描述性。什么不起作用?它怎么不工作?您期望什么行为,您实际看到什么行为?
-
@Amber 我期待与使用 client_id 相同的行为。当我使用之前创建的令牌调用 channel.send_message(token, message) 时,在客户端基本上我没有收到任何消息。另一方面,使用client_id,我可以收到我发送的消息。
-
尝试显示一些代码,了解如何生成令牌并传递它。
-
@amber 在问题中添加了我在做什么
-
请求之间的令牌存储在哪里?
标签: google-app-engine token channel-api