PHPで非同期通信ぽいことをしてみる

Twitter ツイート Hatena Bookmark ブックマーク

現在使用しているAPIの仕様をよく確認してみたところ、このAPIはレスポンスを待たないほうがいいです的なことが書いてあったのですが、よく考えると普通にfile_get_contentsとか使ってしまうとレスポンス待ってしまうわけです。
かといってZendのライブラリにあるHTTPクライアントとかもそんな感じぽいです。PHPだとリクエスト送ったら必ずレスポンスが返ってくることを前提としているからかな?とりあえず、レスポンスが返ってくるのを待ちたくないわけです。

で、非同期っぽく書いてみました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<?php
function async_request( $domain,$path,$params=null $port=80) {
	$fp = fsockopen($domain, $port, $errno, $errstr, 5);
	if ( !$fp ) {
		return false;
	} else {
		$out = "GET " . $path . '?' . http_build_query($params,'','&'). " HTTP/1.0\r\n";
		$out .= "Host: ".$domain."\r\n";
		$out .= "Connection: Close\r\n\r\n";
		fwrite($fp, $out);
		fclose($fp);
	}

	return true;
}
?>

参考
ITメモ帳 非同期でURLにアクセスする

まあAPIが正しく処理されたか知りたいけど、その辺はあきらめる方向で行くしかないかと・・・。PHPで非同期通信とかできたらいいのになぁー。まあ仕組みからしてきついのかな。。。

あーでも、「stream_socket_client」とかその辺使って非同期ができそうです。今度調べてみます。

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。