問題タブ [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.

0 投票する
1 に答える
487 参照

java - チャネル メッセージを送信するサービスへの URLFetch を使用した SocketTimeoutException

2 つの AppEngine (Java) アプリがあります。1 つは URLFetch を使用して、もう 1 つは予定を作成します。受信側では、Channel API を使用して開いているチャネルがあるかどうかを確認し、新しいデータについて通知する機能を追加しました。

URLFetch 呼び出しが SocketTimeoutException で失敗しています。レシーバー内のすべてのコードが実行されます (通知されるすべてのオープン チャネルを含む) が、呼び出し元のアプリは引き続き SocketTimeoutException を取得します。チャンネル通知行をコメントアウトすると、エラーは発生しません。

これは、開発モードではなく、デプロイされたアプリでのみ発生します。また、呼び出しは、URLFetch で許可されている 60 秒 (または以前の 10 秒) のタイムアウトに達しません。

0 投票する
2 に答える
1011 参照

java - 接続/切断(GAEチャネルAPI、Java)を実装する方法は?

これは私のapp.yamlの関連部分です:

ただし、ChannelDisconnectedもChannelConnectedもAppEngineで認識されていないようです。開発サーバー(SDK 1.6.1)からの出力:

そしてウェブログ:

0 投票する
1 に答える
1288 参照

google-app-engine - GAEチャネルAPIの再接続

私はGAEとそのチャネルAPIに加えてチャットアプリケーションに取り組んでいます。私はドキュメントと提供された例を研究し、このあたりの回答のいくつかも調べましたが、それでもclientId/トークンの仕組みの全体像を把握しているとは思えません。

1)。トークンは2時間発行されるので、有効期限が切れたら新しいトークンをリクエストする必要があります。また、クライアントIDパラメーターを使用してハンドラーで切断プレセンスを取得します。つまり、その時点でチャネルが閉じられており、新しいトークンを要求することで、基本的に新しいチャネルを作成しているということですか?それで、その時点でどのクライアントIDを使用できるか、古いものか完全に新しいものかは関係ありません。また、GAEはこれを作成中の新しいチャネルとしてカウントしますか?

2)。トークンの有効期限が切れる前にユーザーが私のページから離れた場合(切断プレゼンスを受け取ります)。そして、戻ってきます(まだその2時間のウィンドウ内にあります)、古いトークンを使用して同じチャネルに彼を再接続できますか(Cookieにそれらがあるとしましょう)?はいの場合、GAEはこれを作成中の新しいチャネルとしてカウントしていませんか?

3)。上記の質問に対する答えが「はい」の場合、サーバー側で切断されたクライアントIDとトークンをガベージコレクションし、それらを新しい接続されたクライアントに配布できますか。このシナリオでは、ユーザーが私のページに戻ってきて、その古いクライアントID /トークンがすでに他の誰かによって使用されている場合、そのユーザーはプールから別のペアを受け取るだけです。それとも、ページごとに1つのチャネルというルールが有効になる場所ですか?

よろしくお願いします、アレクセイ

0 投票する
1 に答える
250 参照

google-app-engine - チャネル API でのメッセージ エラー

localhost で gae Web アプリを実行しています。goog.channel からトークンを正常に生成し、クライアントに送信しました。クライアントがトークンを受け入れることができ、接続を開こうとする場所。問題は、サーブレット クラスからメッセージを送信しているのに、クライアント側で何も起きていないことです。

以下は私のコードです:

サーバ側:

Javascript:

channelservice からメッセージを送信する際に例外はありません。また、クライアント側はサーバーに get リクエストを繰り返し行っています。

http://localhost:8888/_ah/channel/dev?command=poll&channel=channel-h1yphg-vivems@gmail.com&client=connection-3

ここで何が間違っているのですか?前もって感謝します。

0 投票する
1 に答える
228 参照

google-app-engine - RequestFactoryリクエストのチャネルクライアントIDを取得する

サーバーでチャネルIDを取得したり、RequestFactory呼び出し内で送信したりする方法はありますか?

状況:

  • ユーザーがアプリケーションを起動し、チャネルが開かれています。
  • ユーザーはRequestFactory(requests.persist().using(...).fire(...))を使用してエンティティを永続化します。
  • サーバー上のpersist()メソッドは、接続されているすべてのクライアントにpingを実行して、エンティティが更新されたことを通知します。

ただし、最初の変更を行ったユーザーにpingを実行する必要はありません。どのクライアントが変更を加えたかを確認する方法はありますか?1人のユーザーが複数のウィンドウ(チャネル)を開いている可能性があるため、ユーザーを知るだけでは不十分です。

0 投票する
2 に答える
2870 参照

google-app-engine - クライアントとのGAE双方向通信(Java / iOSクライアントの代替チャネルAPI、またはおそらくXMPP)?

クロスプラットフォームのモバイルクライアント(Android、PC- Javaで記述されたものとObjective-Cで記述されたiOS )とGoogle AppEngine(Java)サーバーの間で双方向通信を実装したいと思います。そうすべき:

  1. (クライアントが接続した後)各側が通信を開始できるようにします。
  2. レイテンシが比較的短い(X秒ごとにポーリングするのは問題があります。私の理解では、AppEngine上にあるため、httpリクエストを長時間ポーリングすることはできません)。
  3. 最大で数KBのテキストで、通常ははるかに小さいメッセージをサポートします。

リバースエンジニアリングされたJavaクライアントでChannelAPIを使用することを検討しましたが、これはチャンスをつかんでいるようです(公式にはサポートされていないため)。また、Objective-Cの解決策があるかどうかさえわかりません。私は、自分でそれを実行して実装することを好みません。

次に、XMPPの使用を検討しました。ただし、ユーザーにJabberアカウントを入力させずにこれを行う方法はわかりませんが、これはできません(通信はバックグラウンドで行われます)。クライアントの一時ユーザーを作成する方法はありますか?

C2DMも良い選択肢ではないようです。これはクロスプラットフォームではなく、通信ではなく「通知」に非常に重点を置いているようであり、メッセージ転送の成功を保証するものではありません。

それとも、私が考えていなかったまったく異なるアプローチがありますか?この種のコミュニケーションは私にとって比較的新しいものです。

ありがとう!

編集:

バックグラウンド通信を探しているので、新しいオプションが思い浮かびました。クライアント識別子としてリソースを持つ単一のXMPPユーザーです。つまり、アプリ用に1つのXMPPユーザー( "AppBackgroundUser@domain.com"など)を作成し、クライアントにリソースとして独自のID( "AppBackgroundUser@domain.com/UNIQUEID")を接続させます。 )。この方法に欠点や重大なセキュリティ上の欠陥はありますか?

0 投票する
1 に答える
567 参照

google-app-engine - Chrome および FF でタブが閉じられたときに Channel API /disconnect インバウンド サービスが呼び出されない

ユーザーがアプリケーションにログインするたびにソケット接続を作成します。これは、同じブラウザ ウィンドウ内で新しいタブを開くと、各ブラウザ タブに対して複数のソケット接続が確立されることを意味します。これらのタブを閉じると問題が発生します。/disconnect インバウンド サービスが呼び出されます。これは、一部の接続では /disconnect が呼び出されず、一部では呼び出されることを意味します。これを一貫して再現することはできません (/disconnect と呼ばれることもあれば、そうでないこともあります)。

/disconnect に依存して、特定のチャネル用に作成された (データストアに保存された) 一時オブジェクトをクリーンアップしているため、/disconnect が呼び出されないすべての OpenChannel オブジェクトが残っています。

これは Chrome と FireFox で発生し、IE では発生しません。API を正しく使用していますか? タブではなくブラウザウィンドウごとに1つのソケット接続が必要ですか? (この場合、Cookie にトークンを保存すると、このトークンを使用して接続を再確立しますか?これは、クライアント ID ごとに 2 つの接続としてカウントされませんか?

ありがとう。

0 投票する
2 に答える
545 参照

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

0 投票する
1 に答える
277 参照

python - Channel API を使用する場合、token と client_id の両方をクライアントに渡しても問題ありませんか?

GAE サーバーが常に 1 つのクライアントとのみ通信するアプリケーションを作成する必要があります (つまり、1 つのメッセージを常に 1 つのクライアントにのみ送信する必要があります)。

私は次のことをします -

パイソン:

Javascript:

それはうまく機能しますが、そのようなシナリオではtokenclient_idがクライアントに渡されます。大丈夫ですか?

0 投票する
2 に答える
617 参照

python - GAE 応答の遅延を実装するには?

クライアントからメッセージを受け取ったら、すぐに返信するのではなく、数秒 (ランダムな秒数) 待ちたいと思います。どうすればいいですか?(私はチャネル API を使用しているため、このような遅延はクライアントにとっては問題ないはずです)