0

私の ASP.NET MVC アプリでは、ユーザーは UI のボタンをクリックして電話をかけます。ajax 要求は MVC アプリに送信され、MVC アプリは電話ダイヤラー (電話をかけるために外部コンポーネントを呼び出すライブラリ内のメソッド) を呼び出します。

ダイヤルされた通話が通話の受信者によって終了された場合、電話ダイヤラー コンポーネントは、独自のクラスでイベント ハンドラーを呼び出してイベントを発生させます。

UI を更新できるように、そのイベントをクライアント側に伝達したいと考えています。

使えないオプション

JavaScript サーバーが送信したイベントを見てきました。ただし、JavaScript サーバーから送信されたイベントでは次のようになるという点で、私の状況とは異なります。

1) クライアントは、サーバーへの新しいソケットで接続を開始します。主な違いは、クライアントが接続を開始することです。

2) サーバーまたはクライアントが接続を終了するまで、接続はライブおよびアクティブに保持されます。

3) サーバーは、接続が確立されてから、クライアントまたはサーバーが接続を終了して通知を交換しなくなるまでの間、常に稼働している必要があります。これは、新しいソケット接続と、その結果、通知交換を処理するための新しいワーカー スレッドがクライアントごとに使用されることを意味します。

サーバー送信イベントを使用する場合は、サーバーを存続させる必要があります。つまり、最初に呼び出され、通話の切断に関する通知が受信されるまで存続する、コントローラーと対応するビューで新しいアクションを作成する必要があります。

これはコストがかかるだけでなく、イベントをリッスンするためだけに新しいビューにリダイレクトされたくないため、私の設計にとって直感的ではありません。

誰にも他の選択肢がありますか?

4

2 に答える 2

1

WebSocketまたはLong pollingのいずれかを使用する必要があります。どちらも、通常の HTTP サイクルに加えて、クライアントからサーバーへの接続をセットアップする必要があります。そして、他に何を期待しますか?ページが送信されると、クライアントとサーバー間の通信が完了します。HTTP サイクルは終了し、これ以上データを流すことはできません。クライアントは任意の受信接続を許可しないため、新しい接続はクライアントから開始する必要があります。

于 2013-05-25T07:15:26.213 に答える
1

通常の場合、他の選択肢はないと思います。

SignalR などはすべて、接続が有効であるか、クライアントによって定期的に再起動される必要があります。サーバーがブラウザとの接続を開始できるようにするものは何も知りません(プロキシ/ファイアウォールなどのために技術的に可能とは思えません)。

于 2013-05-25T07:16:06.660 に答える