1

私はSDK 1.6.5、Python 2.5を使用しています

開発サーバーを起動して 127.0.0.1 のチャネル テスト ページにアクセスすると、すべて正常に動作します。トークンが生成されてフロント エンドに渡され、ソケットが開き、クライアント接続の ping が受信され、アプリがクライアントにメッセージを送信し、受信されます。 .

ページをリロードすると:
- ログに切断 ping が表示されない (そうあるべきか?)
- 新しいトークンが生成される (OK)
- フロントエンド js が、新しいトークンで開かれたソケットをログに記録する (OK)
- クライアント接続の ping が受信されない
- . ..サーバー側のコードは、このソケットが開いていることを認識せず、クライアントにメッセージを送信する方法を知りません

ここで適切な流れを誤解していますか?

ページをシフト+リロードしても同じです。すべてを再び機能させるには、開発サーバーを再起動する必要があります。

djangoappengine の使用:

inbound_services:
- warmup
- channel_presence

handlers:
- url: /_ah/channel/.*
  script: djangoappengine/main/main.py
4

1 に答える 1

1

同じクライアント ID を使用している場合、これは多かれ少なかれ予想されます。基本的な理由は次のとおりです。特定のクライアント ID、アプリ ID、およびバージョンが特定の XMPP エンドポイントにマップされます。XMPP フロントエンドは、クライアントが短時間 (たとえば、数秒) オフラインになった場合に、クライアントに切断/接続通知を送信したくありません。ページの更新は基本的に、ネットワーク接続の切断と再ネゴシエーションに似ているため、このケースは一時的に切断された接続のように扱われ、切断/接続は送信されません。

ページの更新時に切断を取得する必要がある場合は、ページ リクエストごとに create_channel の呼び出しで異なるクライアント ID を使用することで、これを回避できます。

于 2012-05-27T22:30:52.990 に答える