• ベストアンサー

サーバ側からリクエストしてくれるようなシステム

現在は普通に Ajaxで20秒に一回サーバにアクセスして、変更があった部分だけを受信してページに反映する みたいなシステムがあるのですが、 サーバ側で変更された部分が出てきた という瞬間にサーバ側から、ページを開いているユーザに対して変更部分を送信するような、 リアルタイムで接続されているかのように見えるシステムをPHPで作りたいと思っています。 やはりそういうシステムというものは1秒や0.5秒ごとにAjaxでサーバに問い合わせているものなのでしょうか?

  • PHP
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
noname#94983
noname#94983
回答No.2

まあ、どうしてもというなら、「リバースAjax」という技術がある。これは、Javaをベースとしたフレームワークの「DWR」などに実装されているのだが、要するにAjaxで問い合わせをした接続をサーバーがずっと別スレッドで保持し続け、何らかの更新があったらその接続ですぐにクライアントを更新させる、というもの。 実際、ためしに動かしたことはあるが、サーバー側の更新はほぼリアルタイムにクライアントに伝えられ表示が更新されるのは確か。DWR以外にもリバースAjaxが使えるフレームワークはいくつかあったように思う。 ただし、接続されたAjax通信をすべて保持し続けるため、サーバー側にかなりな負担がかかる。専用サーバーならいいが、レンタルサーバーのようなところではサーバー管理者側から文句をいわれる可能性はある。

mizutaki
質問者

お礼

なるほど、普通のレンタルサーバでやるのは無理ですか。 ありがとうございました

その他の回答 (1)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

サーバーがデータを受け取れるのはクライアントが接続したときの ヘッダだけです。 サーバー側から送信するというはhttpの仕組みではありません。 リアルタイムに近いものをhttpに求めるのはきびしいです。 Ajaxでも秒単位で要求するような仕組みはすぐ破綻する可能性が高いのでは?

mizutaki
質問者

お礼

なるほど、やはりhttp上で行うのは難しいのですね。 ありがとうございました。

関連するQ&A

  • サーバー側のデータチェックの必要性

    現在JavaとJavascriptでWebアプリケーションを制作しています。 サーバーとの通信はすべてAjaxを使用して、Formで渡すような方法は取っていません。 Javascript側では細かいデータのチェックは行っているのですが、Java側ではデータのチェックを行っていません。 Ajax通信であるため、仮にブラウザでJavascriptを「無効」にしてしまうとAjaxそのものが起動しないためデータをサーバー側に送ることができなくなります。 このことを利用して、Javascript側で完璧なデータチェックを行い、Java側でのデータチェックを省略しています。 ただ、多くの手引書を見るとサーバー側(Java側)でもデータチェックを行う必要があると書かかれていますが、Ajaxのみで通信しているシステムにもこのことは当てはまるのでしょうか。 私の場合どのような危険性や問題点があるかご指摘ください。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • Ajax.RequestでのPHP通信について

    new Ajax.Request を利用してちょっとしたメール送信フォームを作っています。 一通り完成はしたのですが、PHP側での未入力チェック後、jsでの受け取り方が分からず困っています。 ----- <javascript ソース> function postData() {  new Ajax.Request(   "send.php", {    method: "post",    parameters: Form.serialize("myform"),    onComplete: onCompleteHandler   }  ); } function onCompleteHandler(request) {  // ここでPHP側から未記入チェックを受信したい } <PHP ソース> // 必須項目チェック if( $formValue1 == "" || $formValue2 == "" ) {  // ここから未記入を通知したい } ----- このようにPHP側で記入チェックし、それをjs側で受けとる方法が分からず困っています。 すみませんがどなたか教えていただけると助かります。

  • サーバー側で画像解像度を変更する方法

    管理者がブラウザから画像ファイルを送信して、閲覧者向けページに貼り付けるというシステムを作っています。 その時に、画像の解像度(表示サイズではありません)をサーバー側で変更させることは可能でしょうか。 CGI以外の方法でもOKです(サーバーに画像加工ソフトを入れておくなど)。

  • チャットを作る

    リアルタイムチャットについて phpで掲示板とチャットを作ろうかと思うのですが チャットの方にはajax とmysqlが必要になると書いてありました。 ajaxはリアルタイムでページを更新するのに必要になりそうだなとわかったのですが、mysqlがなぜ必要になるかわかりません。 イメージでは掲示板の作り方みたいにpost送信で行けないかなと思うのですが、 チャットの方のmysqlはなぜ必要になるのか教えて下さい。

    • ベストアンサー
    • PHP
  • ユーザー作成画像データのサーバーへの送信

    はじめまして。Flashでのお絵かきツールを作成中なのですが,データの送信について質問があります。よくあるように,ユーザーがマウスなどで自由に描けるキャンパスがあって,そこに描いてもらったデータをサーバーに送信,サーバー側でPerlやPHPを使ってJPEGやPNGに変換する手順については,どうすればよいか分かります。例えば,色やマウス座標の情報を逐一配列に入れて,それをgetURL()などのPOSTメソッドで送信すればいいですよね。  知りたいのは,このデータ送信の際,予めユーザー側のFlash Playerで用意したボタンクリックなどでJPEGやPNGなどの画像として出力,サーバー側は「画像データとして」受信ということは出来ないのでしょうか? ということです。画像データを座標情報として送信するという手順では,サーバー側での変換プログラミングが必要で,その手間を省けたらいいなと考えています。

    • ベストアンサー
    • Flash
  • サーバーに送られたデータを計算して返す場合

    クライアントの方で「1+2」のデータをサーバー側に送信して、結果を返しなさいというプログラムを書くとします。 クライアント <html><body>ここにフォームと送信ボタン<br><br><center>XXX</center></body></html> サーバー側で計算した結果をクライアント側に書かれているXXXXという所に返したいとします。PHPで計算してサーバー側でクライアントと全く同じhtmlを書いてあげれば計算した結果を返すことができます。$iと$jはクライアントから <PHP? $z=$i+$j; print "<html>....<center>$z</center>..... というような(上は適当)PHPで計算した結果を所定の場所に埋め込んで、あとはPHPでhtmlを書き出せばユーザーからは計算された結果が返されたというようになります。 このコードは短いですが、商業用のページとかもの凄い量のhtmlのコードが書かれているわけですが、例えば1000行くらいのhtmlがあって、そのページの中で上記の簡単な計算のみ返すプログラムが欲しいとすると、サーバー側では同じ1000行文のhtmlとPHPによる計算が必要になりますが、わざわざ1000行もhtmlをサーバー側でやるのは面倒です。実際こういう場面ではどのように処理をするのが的確なんでしょうか?よろしくお願いします。

    • ベストアンサー
    • PHP
  • system関数

    以下のように、phpでsystem関数を用いて $command = "php4 -q <ファイル名>.php"; system($command); コマンドラインからプログラムを実行していたんですが、ファイルを別サーバに移動させたところ、 実行できなくなりました。 双方ともphpのバージョンは4.0.6、 コマンドラインからphpを実行できるように設定されています。 変わった点はapacheのuserがnobodyから 他の名前に変更されています。 やはり、実行できないのはapacheのuserが変更されたのが 原因なのでしょうか? もし、そうならばどのように対処すればよいのでしょうか?よろしくお願いします。

    • ベストアンサー
    • PHP
  • ajaxの使いどころ

    現在、会員制のWebサービスを作成しています。 まだ初期段階ですが、今は管理者用のユーザー管理ページに着手しており、サーバーサイド、クライアントサイド合わせて、およそ7割程度完成しているいるところです。 このページの現時点での実装では、ユーザーの削除、復活、パスワードリセット、登録情報の変更、新規ユーザーの登録といった全機能でajaxを使っています。 また、処理対象のユーザーは一覧のテーブルをクリックして選択するのですが、このクリック時にサーバーからユーザーの詳細情報を取得しており、ここでもajaxを使っています。 要するに、1ページ取得したあと、そのページ内でサーバーと通信を行う必要が生じたら、それはすべてajaxを使うという決まりです。 そこで、ajaxの運用についていくつかわからない点があり、質問させて頂きます。 (1) 会員専用ページという性質を考えると、ajaxでリクエストを送信した際にも、サーバーサイドではそのリクエストに対するセッションが有効かどうかをチェックする必要がありますよね? 一般的な会員向けWEBサービスでは、"ページ遷移毎"だけでなく、"ajaxでの通信毎"でもセッションのチェックを行うものなのでしょうか。 (2) ajaxでの通信時にセッションの有効性をチェックした結果、すでにタイムアウト等でセッションが無効な場合、一般的にはどうするべきなのでしょうか。 個人的にはlogoutページにリロードしたいと考えているのですが、このようにするには、サーバー側がレスポンスを返すときに、{error:{code:'1',message:'session_out'}}のようなJSONを返して、それをjavascript側で確認し、location.hrefを書き換える、というような流れで処理を行うことになるのでしょうか。 (3) そもそも、今回のように「1ページ内で生じるサーバー間通信は全てajaxで補う」という考え方は、一般的なものなのでしょうか。 なにが言いたいかというと、"セキュリティ等を考慮してajaxを使うべきではない処理"と"ajaxを積極的に使うべき処理"(もしくは、"ajaxを使っても差し支えない処理")の判断の仕方、つまり、ajaxの使いドコロがよく分かっていません。 以上3点につきまして、ご教授いただければ幸いです。

    • ベストアンサー
    • AJAX
  • AJAXとSEO。同期通信とPHP送信の違い

    「AJAX」「SEO」「同期通信」「PHPでPOST送信」について、幾つか分からないことがあるので教えてください ■質問1 ・AJAX通信すると、SEO的に不利なのでしょうか? 例えば、AJAXでCSVファイルを読み込む場合はどうなるでしょうか? もしかして、実装方法による? 下記例で、何か違いはあるでしょうか? ・例1 … 非同期。ページ読込後にCSV読込(そもそもこの実装は可能?) ・例2 … 非同期。ページ読込前にCSV読込 ・例3 … 同期。ページ読込後にCSV読込 ・例4 … 同期。ページ読込前にCSV読込 ■質問2 ・AJAX通信で検索ボタンを押したページ結果は、クローラーされることはあるのでしょうか? サーバからデータを取得しているから反映される? 非同期だったら、反映されない? 同期だったらされる? ■質問3 ・AJAX通信の同期処理の意味が分かりません(jQueryのasyncをfalseなど)。非同期通信がAJAXだと思うのですが、AJAX通信の同期処理というのは、何なのでしょうか? 例えば、「PHPでPOST送信」するのと、原理的には全く同じということになるのでしょうか?(PHPで実装するか、js実装するかの違いだけ?) 最終的に、SEOを重視する場合は(非同期の操作性を捨て)同期処理で実装した方が良い、ということになるのでしょうか?

    • ベストアンサー
    • AJAX
  • prototype.jsのAjax.Request

    javascript部分 function loadDataFile(intvalue){  new Ajax.Request("uploader.php",{   method:'post',   onComplete:function(httpObj){    test(intvalue);   }  }); } function test(intvalue){  // 画像表示のための処理 } htmlのform部分 <form action="sample.php" method="post" name="syouhintouroku" enctype="multipart/form-data">  <input type="file" id="img_path1" name="img1" value="" />  <input type="button" value="画像を確認" onclick="loadDataFile(引数);" /> </form> 今は、ざっとこのような感じで書いています。 「画像を確認」ボタンが押されると画像がアップロードされるようにしたいのですが画像が送られていません。 ちなみに、uploader.phpというのはPOST送信されてきたファイルをサーバー側のファイルに保存する処理をしています。通常のformのsubmitでは画像はちゃんとアップロードされるのでPHPファイルのほうに問題はないと思われます。 もしかして、Ajax.Requestでは画像が送れないとか書き方が違うとかいうことなんでしょうか? よろしくお願いします。

    • ベストアンサー
    • AJAX

専門家に質問してみよう