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

19年11月23日(Sat) 0時38分
TOP » UsersWiki » nao-pon » blog » 2006-11-17

PHP で非同期通信 anchor.png

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

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

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

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

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

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$_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 の実際のコードで、時間の掛かる検索用テキストデータベースの更新を、バックグラウンドで行わせています。

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





Post a new comment

Subject
guestname
Body

Go to richer form

Front page   Freeze Diff Backup Copy Rename ReloadPrint View   New Page Page list Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom) Powered by xpWiki
Counter: 12974, today: 1, yesterday: 2
Princeps date: 2006-11-17 (Fri) 21:37:48
Last-modified: 2006-11-17 (Fri) 21:37:48 (JST) (4753d) by nao-pon
このページのTopへ
ログイン
ユーザ名:

パスワード:

オートログイン

Basic 認証 | SSLログイン

Register now! | Lost Password?



メインメニュー
UsersWiki メニュー
付箋メニュー
Fusen(Tag) menu 
Tag Editor
Color: BG:
Name:  Connect line ID:
 
ブックマーク
Please log in to use it.
[Login]
サイト内 Wiki
☆ 検索 ☆



高度な検索(サイト内)
FireFox検索プラグイン
オンライン状況
合計 100 人がオンライン中 :-)
(UsersWiki : 4 人)

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

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

nao-pon
 

登録ユーザ数: 4619


Web Services by Yahoo! JAPAN
楽天ウェブサービスセンター
Amazon.co.jpアソシエイト
現在ページのQRコード
現在ページのQRコード
[携帯対応]
参照元情報