hypweb.net
XOOPSマニア  最新情報のRSS(サイト全体)
[ 自宅サーバーWebRing |ID=54 前後5表示乱移動サイト一覧 ]

09年1月9日(Fri) 7時20分
TOP » Wiki [自由帳] » PHP で非同期通信-徒然日記/2006-11-17-Wiki [自由帳]
Counter: 1955, today: 3, yesterday: 4

PHP で非同期通信 Fixed link

PHPでWebサーバー側で処理をするとき、更新に時間がかかる処理だと、POSTしてからページが表示されるまでのタイムラグが気になります。

ページ表示に直接関係のない処理であれば、バックグラウンドで実行させることができれば、よりスムーズなブラウジングができるので、以前からいろいろと方法を考えていました。

PukiWikiMod では、PHPが自身でもう一度Webサーバーにリクエストするという方法をとっていますが、これは、いまいち美しくないし、かっこ悪いです。

そもそも、ローカルからのアクセスを禁止している場合もあるので、何とかしたいと思っていました。

そこで、今開発中の xpWiki では、ブラウザとの接続を一旦切って、もう一度リダイレクトさせたあとも、PHP側では実行を続けるという方法を考えてみました。

実際のスクリプトコードは、次のような感じです。

$_udp_file = $const['CACHE_DIR'].$this->encode($vars['page']).".udp";
if (file_exists($_udp_file)) {
	$_udp_mode = join('',file($_udp_file));
	unlink($_udp_file);
	
	// ブラウザとのコネクションが切れても実行し続ける
	ignore_user_abort(TRUE);
	
	// ブラウザにはリダイレクトを通知
	$base = preg_replace("#^(https?://[^/]+).*$#i","$1",$const['ROOT_URL']);
	$uri = $base.$_SERVER['REQUEST_URI'];
	while( ob_get_level() ) { ob_end_clean() ; }
	$out = "\r\n";
	header("Content-Length: ".strlen($out));
	header("Connection: close");
	header("Location: " . $uri);
	echo $out;
	flush();
	
	// ブラウザは再表示し、PHPは実行を継続
	sleep(5);
	$this->plain_db_write($vars['page'], $_udp_mode);
	exit();
}

これは、 xpWiki の実際のコードで、時間の掛かる検索用テキストデータベースの更新を、バックグラウンドで行わせています。

終了時のイベントが新しいプロセスでリアルタイムに拾えるわけではないので、非同期通信もどきですが、結構使えるのではないかと思っています。



Name:

似たような BLOG Fixed link

Last-Modified:2009/01/09 06:03:59

付箋機能(wema) メニュー 
付箋の編集
文字色: 背景色:
お名前:  線接続id:


Attach file: filefusen.dat 9 download [Information]
Reload   Diff Source Attach Attach List   Wiki Top Page List Search Resent Chenges Backup   Help   RSS feed
Page name:徒然日記/2006-11-17 [ Sended pings(6) ]
Author:nao-pon - 2006/11/17 21:37:48 JST(783d)
Last edit:通りすがりさん - 2008/11/20 10:51:33 JST(49d)
Editers:nao-pon
Back Link:通りすがりさん(57d) PukiWikiMod(110d) xpWiki(531d) 通りすがりさん(820d) PHP(1191d) 徒然日記(1602d)

ページコメント
 
The comments are owned by the poster. We aren't responsible for their content.

Track Back [ Track Back(0) ]
Track Back URL: http://xoops.hypweb.net/wiki/tb/5422

このページのTopへ
ログイン
ユーザ名:

パスワード:

オートログイン

Basic 認証

Register now! | Lost Password?

mixiでログイン Yahoo!でログイン
メインメニュー
最新のページ
ブックマーク
Please log in to use it.
[Login]
新着トラックバック
サイト内 Wiki
☆ 検索 ☆



高度な検索(サイト内)
FireFox検索プラグイン
オンライン状況
合計 40 人がオンライン中 :-)
(Wiki [自由帳] : 9 人)

登録ユーザ: 0 & ゲスト: 40

もっと...
サイト情報
管理人

nao-pon
 

登録ユーザ数: 1486


現在ページのQRコード
現在ページのQRコード
[携帯対応]
参照元情報
No trackback