- PR -

.netFramework2.0(C#)でComet方式は実装できるのでしょうか?

投稿者投稿内容
Makoto
大ベテラン
会議室デビュー日: 2004/03/31
投稿数: 133
投稿日時: 2008-09-25 19:43
いつもお世話になっております。
ご存知の方、試みた方などいらっしゃいましたら、ご意見をお願いします。

WebでサーバプッシュするCometという方式が
下記サイトで紹介されていますが、
.netFramework2.0のクラス(WebhttpRequestクラスなど)を使用して
この方法を利用したクライアント(Windowsアプリ)を
実装することは可能なのでしょうか?

  http://www.atmarkit.co.jp/fjava/rensai4/safetomcat_03/safetomcat_03_1.html

今回ある案件で検討したのですが、
期間の都合で動作試験、方式採用などは行えませんでした。

クラス説明などをMSDNで読み無理かなといった印象を受けています。

ご存知の方、もしくは私はこう予想するなどでも良いのですが、
意見などありましたらお願いします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-09-25 21:56
できないことはないですよ。
「サーバ側からの非同期処理も実現できる」といえばすごいようですが、実体は
クライアントからのリクエストを、タイム アウト ギリギリまで待たせる、
ということです。なので、タイム アウトの時間ギリギリまでウェイトをかけて、その間にイベントが発生すればイベントでレスポンスを返す。発生しなければ、リフレッシュするレスポンスを返す。

サーバに負荷をかける、という点では、同じだと思います。
indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-09-26 08:38
WCFの検討はどうでしょうか?(あまり詳しくはないですが)
WSDualHttpBindingなどで双方向可能ですが、Ajaxライブラリの方が対応していないかも?

私的にはリアルタイム性をどこまで求めているのかわからないですが、
Timerポーリング+Ajaxでいいんじゃなでしょうか?
Makoto
大ベテラン
会議室デビュー日: 2004/03/31
投稿数: 133
投稿日時: 2008-09-26 09:07
回答ありがとうございます。
ちょっと言葉足らずだったようですので補足させて下さい。

提示いただいた内容は、下記サイトで言うところの
『ロングポーリング』だと思います。
今回は、『ロングポーリング』ではなく『ストリーミング 』にしたいのです。

  http://www.infoq.com/jp/articles/javaone2008_comet

またサーバは、Linux+Apatch/tomcatですので、
WCFなどの.netに特化した技術は採用できない現状があります。

単純には、下記のような動作にしたいのです。

 @自作アプリからhttpリクエストをしてWebサーバへ接続をはる
(以降、張りっぱなし)
 Aサーバでイベント発生時に、リアルタイムに通知イベントを発生させる。
 ※何らかのエラーが出て切れる場合は再接続でOKですが、
仕組み上必ず切れるのはNGなのです。

『ロングポーリング』では、接続が切れるタイミングが必ず一回の要求づつに
一瞬発生することになると思いますが、それでは要件的に採用メリットが得られそうにないのです。

indigo-x
大ベテラン
会議室デビュー日: 2008/02/21
投稿数: 207
お住まい・勤務地: 太陽の塔近く
投稿日時: 2008-09-26 10:07
すいませんてっきりASP.NETと間違えてました。

クライアント数(同時)Xリアルタイム性Xデータ量で
サーバーの負荷が耐えれるならやっぱりポーリングで良いのでは?
(自力でcommetぽいのは大変かも)

+HTTP(+Port80)でないとだめなの?(インターネット?)
Makoto
大ベテラン
会議室デビュー日: 2004/03/31
投稿数: 133
投稿日時: 2008-09-26 10:23
回答ありがとうございます。

>クライアント数(同時)Xリアルタイム性Xデータ量で
>サーバーの負荷が耐えれるならやっぱりポーリングで良いのでは?
>(自力でcommetぽいのは大変かも)

今回は、ご指摘の『(自力でcommetぽいのは大変かも) 』
の理由で不採用にしたのです。
わからないことだらけなので、仕組み的にも品質保証できる自信がなかったので...

>+HTTP(+Port80)でないとだめなの?(インターネット?)

HTTP(+Port80)は要件になっています。
そこから、インターネット、イントラネット問わずにという要件です。

まぁ不採用にしたのですが、実際、自作せずに.netクラスにあるのかないのか?
判断は合っていたのかどうかというのを念のため確認したくての投稿だったのです。

やはり無さそうという感じなのですね。
ご意見ありがとうございました。
渋木宏明(ひどり)
ぬし
会議室デビュー日: 2004/01/14
投稿数: 1155
お住まい・勤務地: 東京
投稿日時: 2008-09-26 10:42
引用:

今回は、『ロングポーリング』ではなく『ストリーミング 』にしたいのです。



例えば、TcpClient を使ってコツコツと組み立てることは可能でしょう。

けど、HttpWebRequest だとどうかなぁ?
接続しっぱなしにきちんと対応しているかどうかは微妙な気がします。

あと、検索エンジンとかで探せば、誰かが作った Commet クライアントのソースとかがみつかったりする可能性もあるんじゃないでしょーか。
Makoto
大ベテラン
会議室デビュー日: 2004/03/31
投稿数: 133
投稿日時: 2008-09-26 11:09
アドバイスありがとうございます。

>例えば、TcpClient を使ってコツコツと組み立てることは可能でしょう。

これって、SSL対応は簡単に実装できるんでしょうか?

>けど、HttpWebRequest だとどうかなぁ?
>接続しっぱなしにきちんと対応しているかどうかは微妙な気がします。

やはりこの変が微妙なセンなんですよね。

>あと、検索エンジンとかで探せば、誰かが作った
>Commet クライアントのソースとかがみつかったりする可能性もあるんじゃないでしょーか。

なるほど、あたってみます。
アドバイスありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)