問題の説明: チャネル メッセージが ajax スクリプトに返されませんでした。最初は、メッセージはクライアント側に配信されますが、js でより大きなタイムアウトを設定すると問題が発生します。
goog.appengine.Socket.POLLING_TIMEOUT_MS = 5000; // 5 秒ごとにポーリングする
Channel API が Google App Engine アプリで機能するかどうかをテストするために、非常に基本的な Python コードを追加しました。
index:
token = channel.create_channel(CHANNEL_NAME)
channel.send_message(CHANNEL_NAME, message)
#token is passed to template
additional_view:
#is another view, trigger manually from browser after index
from django.utils import simplejson
channel.send_message(CHANNEL_NAME, simplejson.dumps(data))
クライアント側には、onMessage コードを含む通常の js があります。
問題は、クライアント側の要求にメッセージが返されないことです。それらはすべて ajax のポーリングに対して空になります (Firebug で見られるように)。アプリケーション ログで、チャネルが作成されたことを確認できます。
「Creating channel token channel-2382918168-broadcast with client id broadcast」 以降のメッセージが送信されますが、コメントが付きます。
間に次のリクエストがあります。
INFO 2011-08-03 14:33:32,000 dev_appserver.py:4248] "POST /_ah/channel/connected/ HTTP/1.1" 404 -
INFO 2011-08-03 14:33:33,780 dev_appserver.py:4248] "POST /_ah/channel/disconnected/ HTTP/1.1" 404 -
** ....メッセージ テキスト...キー付きチャネルへ (ブロードキャスト): クライアントが接続されていません***
チャネル/メッセージはより深いレベルでどのように機能しますか? クライアントが接続されていない場合、または新しく接続されたクライアントによって取得された場合、メッセージは失われますか? なんらかの理由で同じ名前のチャネルを作成した場合、内部にある未配信のメッセージは破棄されますか?