【发布时间】:2012-07-09 16:32:32
【问题描述】:
我正在尝试使用 Google App Engine 中的通道 API 构建聊天应用程序。 当通过http://developers.google.com/appengine/docs/python/channel/overview 我无法理解使用 XMLHttpRequest() 打开套接字部分; 任何帮助将不胜感激!! 谢谢
【问题讨论】:
我正在尝试使用 Google App Engine 中的通道 API 构建聊天应用程序。 当通过http://developers.google.com/appengine/docs/python/channel/overview 我无法理解使用 XMLHttpRequest() 打开套接字部分; 任何帮助将不胜感激!! 谢谢
【问题讨论】:
基本上,当套接字打开时,下面的代码会更新一个示例井字游戏的用户界面,并向服务器发送一条 POST 消息,询问最新的游戏状态。
代码不是 Python,它是客户端 Javascript。我在下面评论了它:
sendMessage = function(path, opt_param) {
/* path variable is part of a URL being maintained */
path += '?g=' + state.game_key; /* Saving game key in URL */
if (opt_param) {
path += '&' + opt_param; /* Adding optional parameters to the path */
}
var xhr = new XMLHttpRequest(); /* Used for Ajax in Javascript */
xhr.open('POST', path, true); /* Asynchronously POST, via HTTP, the path */
xhr.send(); /* Start the POST above */
};
onOpened = function() {
connected = true; /* Set boolean value, which lets us know we're connected */
sendMessage('opened'); /* We can now send messages to the server */
updateBoard(); /* Update user interface to reflect that socket is open */
};
请注意,应用程序将 sendMessage() 定义为 XmlHttpRequest 的包装器,客户端使用它来向服务器发送消息。
【讨论】:
updateBoard()。
sendMessage 实际上是向服务器发送消息(路径)。 onOpened 在套接字打开时执行。 updateBoard() 是一个 Javascript 函数,用于更新井字游戏的 GUI。
当客户端和服务器之间的通道建立时,套接字被“打开”。此时将调用 OnOpened 回调。回调向服务器发出 POST 请求以获取游戏的当前状态。因此 XMLHttpRequest 与套接字的打开无关,而只是一种具有双向通信的常见编码模式,因为通道只是一种方式(服务器到客户端)。另一条路由(客户端到服务器)是通过这些 HTTP 请求完成的。几乎每次您在频道中收到来自服务器的消息时,您都希望向服务器发送回一些内容(响应、更新等)。 希望这会有所帮助。
【讨论】: