問題タブ [channel-api]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - チャネル メッセージを送信するサービスへの URLFetch を使用した SocketTimeoutException
2 つの AppEngine (Java) アプリがあります。1 つは URLFetch を使用して、もう 1 つは予定を作成します。受信側では、Channel API を使用して開いているチャネルがあるかどうかを確認し、新しいデータについて通知する機能を追加しました。
URLFetch 呼び出しが SocketTimeoutException で失敗しています。レシーバー内のすべてのコードが実行されます (通知されるすべてのオープン チャネルを含む) が、呼び出し元のアプリは引き続き SocketTimeoutException を取得します。チャンネル通知行をコメントアウトすると、エラーは発生しません。
これは、開発モードではなく、デプロイされたアプリでのみ発生します。また、呼び出しは、URLFetch で許可されている 60 秒 (または以前の 10 秒) のタイムアウトに達しません。
java - 接続/切断(GAEチャネルAPI、Java)を実装する方法は?
これは私のapp.yamlの関連部分です:
ただし、ChannelDisconnectedもChannelConnectedもAppEngineで認識されていないようです。開発サーバー(SDK 1.6.1)からの出力:
そしてウェブログ:
google-app-engine - GAEチャネルAPIの再接続
私はGAEとそのチャネルAPIに加えてチャットアプリケーションに取り組んでいます。私はドキュメントと提供された例を研究し、このあたりの回答のいくつかも調べましたが、それでもclientId/トークンの仕組みの全体像を把握しているとは思えません。
1)。トークンは2時間発行されるので、有効期限が切れたら新しいトークンをリクエストする必要があります。また、クライアントIDパラメーターを使用してハンドラーで切断プレセンスを取得します。つまり、その時点でチャネルが閉じられており、新しいトークンを要求することで、基本的に新しいチャネルを作成しているということですか?それで、その時点でどのクライアントIDを使用できるか、古いものか完全に新しいものかは関係ありません。また、GAEはこれを作成中の新しいチャネルとしてカウントしますか?
2)。トークンの有効期限が切れる前にユーザーが私のページから離れた場合(切断プレゼンスを受け取ります)。そして、戻ってきます(まだその2時間のウィンドウ内にあります)、古いトークンを使用して同じチャネルに彼を再接続できますか(Cookieにそれらがあるとしましょう)?はいの場合、GAEはこれを作成中の新しいチャネルとしてカウントしていませんか?
3)。上記の質問に対する答えが「はい」の場合、サーバー側で切断されたクライアントIDとトークンをガベージコレクションし、それらを新しい接続されたクライアントに配布できますか。このシナリオでは、ユーザーが私のページに戻ってきて、その古いクライアントID /トークンがすでに他の誰かによって使用されている場合、そのユーザーはプールから別のペアを受け取るだけです。それとも、ページごとに1つのチャネルというルールが有効になる場所ですか?
よろしくお願いします、アレクセイ
google-app-engine - チャネル API でのメッセージ エラー
localhost で gae Web アプリを実行しています。goog.channel からトークンを正常に生成し、クライアントに送信しました。クライアントがトークンを受け入れることができ、接続を開こうとする場所。問題は、サーブレット クラスからメッセージを送信しているのに、クライアント側で何も起きていないことです。
以下は私のコードです:
サーバ側:
Javascript:
channelservice からメッセージを送信する際に例外はありません。また、クライアント側はサーバーに get リクエストを繰り返し行っています。
ここで何が間違っているのですか?前もって感謝します。
google-app-engine - RequestFactoryリクエストのチャネルクライアントIDを取得する
サーバーでチャネルIDを取得したり、RequestFactory呼び出し内で送信したりする方法はありますか?
状況:
- ユーザーがアプリケーションを起動し、チャネルが開かれています。
- ユーザーはRequestFactory(
requests.persist().using(...).fire(...)
)を使用してエンティティを永続化します。 - サーバー上の
persist()
メソッドは、接続されているすべてのクライアントにpingを実行して、エンティティが更新されたことを通知します。
ただし、最初の変更を行ったユーザーにpingを実行する必要はありません。どのクライアントが変更を加えたかを確認する方法はありますか?1人のユーザーが複数のウィンドウ(チャネル)を開いている可能性があるため、ユーザーを知るだけでは不十分です。
google-app-engine - クライアントとのGAE双方向通信(Java / iOSクライアントの代替チャネルAPI、またはおそらくXMPP)?
クロスプラットフォームのモバイルクライアント(Android、PC- Javaで記述されたものとObjective-Cで記述されたiOS )とGoogle AppEngine(Java)サーバーの間で双方向通信を実装したいと思います。そうすべき:
- (クライアントが接続した後)各側が通信を開始できるようにします。
- レイテンシが比較的短い(X秒ごとにポーリングするのは問題があります。私の理解では、AppEngine上にあるため、httpリクエストを長時間ポーリングすることはできません)。
- 最大で数KBのテキストで、通常ははるかに小さいメッセージをサポートします。
リバースエンジニアリングされたJavaクライアントでChannelAPIを使用することを検討しましたが、これはチャンスをつかんでいるようです(公式にはサポートされていないため)。また、Objective-Cの解決策があるかどうかさえわかりません。私は、自分でそれを実行して実装することを好みません。
次に、XMPPの使用を検討しました。ただし、ユーザーにJabberアカウントを入力させずにこれを行う方法はわかりませんが、これはできません(通信はバックグラウンドで行われます)。クライアントの一時ユーザーを作成する方法はありますか?
C2DMも良い選択肢ではないようです。これはクロスプラットフォームではなく、通信ではなく「通知」に非常に重点を置いているようであり、メッセージ転送の成功を保証するものではありません。
それとも、私が考えていなかったまったく異なるアプローチがありますか?この種のコミュニケーションは私にとって比較的新しいものです。
ありがとう!
編集:
バックグラウンド通信を探しているので、新しいオプションが思い浮かびました。クライアント識別子としてリソースを持つ単一のXMPPユーザーです。つまり、アプリ用に1つのXMPPユーザー( "AppBackgroundUser@domain.com"など)を作成し、クライアントにリソースとして独自のID( "AppBackgroundUser@domain.com/UNIQUEID")を接続させます。 )。この方法に欠点や重大なセキュリティ上の欠陥はありますか?
google-app-engine - Chrome および FF でタブが閉じられたときに Channel API /disconnect インバウンド サービスが呼び出されない
ユーザーがアプリケーションにログインするたびにソケット接続を作成します。これは、同じブラウザ ウィンドウ内で新しいタブを開くと、各ブラウザ タブに対して複数のソケット接続が確立されることを意味します。これらのタブを閉じると問題が発生します。/disconnect インバウンド サービスが呼び出されます。これは、一部の接続では /disconnect が呼び出されず、一部では呼び出されることを意味します。これを一貫して再現することはできません (/disconnect と呼ばれることもあれば、そうでないこともあります)。
/disconnect に依存して、特定のチャネル用に作成された (データストアに保存された) 一時オブジェクトをクリーンアップしているため、/disconnect が呼び出されないすべての OpenChannel オブジェクトが残っています。
これは Chrome と FireFox で発生し、IE では発生しません。API を正しく使用していますか? タブではなくブラウザウィンドウごとに1つのソケット接続が必要ですか? (この場合、Cookie にトークンを保存すると、このトークンを使用して接続を再確立しますか?これは、クライアント ID ごとに 2 つの接続としてカウントされませんか?
ありがとう。
python - Google App Engine の Channel API と開発サーバーの使用時の JavaScript エラー
Channel API を使用する Python GAE アプリを作成していますが、開発サーバーの使用時に Firefox エラー コンソールで致命的ではないブラウザー エラーが発生することを除いて、すべて正常に動作します。これは基本的にすべての Channel API アプリケーションで同じなので、サンプルの Channel Tac Toe アプリで表示される内容を示します。
これは、表示されるソース コードが常に数字の「1」である構文エラーから始まります。
次は「整形式でない」エラーです (Channel Tac Toe のみ):
次に、「要素が見つかりません」というエラーが無限に続きます。1 秒に約 3 回です。
この後、私の実際のアプリケーションは問題なく動作しますが、Channel Tac Toe の動作は悪くなります (双方が X プレーヤーになりたがっています)。
これらはすべて JavaScript エラーであるため、スタック トレースがないことに注意してください。
(a) これらの問題の原因は何ですか? アプリケーションは実行されますが、これらのエラーにより自信が低下します。
(b) 無限に続く「要素が見つかりません」というメッセージは、他の JavaScript エラーを確認するのが非常に困難になるため、実際の問題です。
同じ問題の別のレポートに出くわしましたが、フォローアップは役に立ちませんでした.
私の構成: Windows 7、Firefox 10.0.2 (アドオン無効)、GAE 1.6.2
python - Channel API を使用する場合、token と client_id の両方をクライアントに渡しても問題ありませんか?
GAE サーバーが常に 1 つのクライアントとのみ通信するアプリケーションを作成する必要があります (つまり、1 つのメッセージを常に 1 つのクライアントにのみ送信する必要があります)。
私は次のことをします -
パイソン:
Javascript:
それはうまく機能しますが、そのようなシナリオではtoken
とclient_id
がクライアントに渡されます。大丈夫ですか?
python - GAE 応答の遅延を実装するには?
クライアントからメッセージを受け取ったら、すぐに返信するのではなく、数秒 (ランダムな秒数) 待ちたいと思います。どうすればいいですか?(私はチャネル API を使用しているため、このような遅延はクライアントにとっては問題ないはずです)