GoogleAppEngineでチャネルAPIを使用してチャットアプリケーションを構築しようとしています。http://developers.google.com/appengine/docs/python/channel/overviewを確認する と、XMLHttpRequest()を使用してソケット部分を開くことが理解できませんでした。どんな助けでも大歓迎です!! ありがとう
2 に答える
基本的に、ソケットが開かれると、以下のコードはサンプルのTic Tac Toeゲームのユーザーインターフェイスを更新し、最新のゲーム状態を要求する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のラッパーとして定義していることに注意してください。
クライアントとサーバー間のチャネルが確立されると、ソケットは「開かれ」ます。その時点で、OnOpenedコールバックが呼び出されます。コールバックは、ゲームの現在の状態を取得するためにサーバーにPOSTリクエストを返します。したがって、XMLHttpRequestはソケットのオープンとは関係ありませんが、チャネルが一方向(サーバーからクライアント)であるため、双方向通信を行うための一般的なコーディングパターンにすぎません。もう1つのルート(クライアントからサーバー)は、これらのHTTPリクエストを介して実行されます。サーバーからチャネルでメッセージを受信するたびに、サーバーに何かを送り返したいと思うでしょう(応答、更新など)。お役に立てれば。