A Day In The Boy's Life -105ページ目

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

PHP内からあのサービスに接続したいけど、その前に正常に動いているか確認したいってときに、ソケット通信で相手先のサービスの稼動状況を確認できたりします。



PHPでソケット通信してサービスの稼動状況をチェックするサンプル


PHPでソケット通信するためには、ソケット関数fsockopen関数 を利用します。


<?php

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

if (@socket_connect($socket, "192.168.0.100", 80)) {
    echo "接続できました";
} else {
    echo socket_strerror(socket_last_error());
}

<?php

$socket = @fsockopen("192.168.0.100", 23, $errno, $errstr, 10);

if ($socket === FALSE) {
    echo $errno . $errstr;
} else {
    echo "接続できました";
}

これはサーバーや特定のポート(例えばHTTPとか)が応答するかどうかのチェックなので、厳密なその上で利用したいサービスやAPI等が正常に応答するかというチェックではありません。

例えば、最初のHTTPのサービスが動いているかどうかは、ポートからの応答があるというのはわかりますが、実際にリクエストを投げてみればHTTPステータスコード500(Internal Server Error)が返ってくる場合もあり、厳密なチェックではありません。


ただ、PINGを飛ばして応答を見るといった簡易的な死活チェックには使えます。

実際に応答が無かった場合などは、


111Connection refused
113No route to host

のような、エラーコードとメッセージを受け取ることもできます。



socket_connect()のタイムアウトの問題


socket_connect() を使った場合で、例えば指定したIPのサーバーがダウンしていたり経路が存在しなかった場合に、激しくタイムアウトまで待たされるという現象が出たりします。

どうもsocket_connect()にはコネクション確立時のタイムアウトが設定できないっぽいです。


socket_set_option()stream_set_timeout() など設定できそうな関数があるんですが、コネクション時のタイムアウトは設定できないっぽい。(そもそもstream_set_timeout()はストリームに対する操作のため、socket_connect()のリソースには適用できない)


PEARのNet_Socketを使っても同様の問題(内部的にはsocket_connect()を使っているので当たり前ですが)が出ますし、オプションも見当たらないのでfsockopen()を使った方が無難なのかな、と思ったりします。


$socket = @fsockopen("192.168.0.100", 23, $errno, $errstr, 10);

のように、第5引数でコネクション時のタイムアウト(上記の場合は10秒)を設定できますし。





日本語設定のWeb画面上にも公式RTが実装され、その前後からRTに関する問題などが活発に議論されています。

非公式の場合は、140文字と言う制限から元の発言(または発言者)がわからなくなると言う問題があり、公式RTの場合は、奇妙な仕様により自分がフォローしていない人の発言がタイムライン上に流れてくる(自分のフォローしているの誰かが、その人のフォローしている別の人のつぶやきを公式RTした場合)という問題があったりするようです。


ただ、自分としてはそういうことはあまり気にならなかったり。

Twitterのタイムライン(ブログをRSSで購読する場合も同様でしょうけど)を考えたら、タイムラインそのものは自分のオリジナルであっても、その元の発言は発言者自信のものであるから、というところがあったりするからです。



タイムラインはコントロール可能なものか


Twitterを始めた頃は、タイムライン上の発言を大体隅から隅まで読んでいました。

その中に面白いつぶやきが無いかとても気になりましたし、何よりも情報をそこから集めだそうとする意欲がとても高かったように思えます。


しかし、ある程度フォローする人の数が増えてくるととてもそれが無理になりました。(私の場合300人超えぐらいから)

そこで、タイムラインから情報を拾うのはある種偶発的なものだと割り切るような考えを持ち出しました。

ある時に見たタイムラインを見て、その時の情報だけを拾うように。


逆に全てを追い出すと時間が幾らあっても足りませんし、それでも面白いつぶやきは何回もRTされて情報があがってきましたし、ばずったーやタグやリストによって気になる人のつぶやきを拾うことは十分可能だったので、それで満足をしていたりします。

誰が何をしているかは、自分にとってわからないものですから、POSTした偶然と自分が見た偶然が重なりあった楽しさと言うものもあるのかなと思ったりしています。


なので、素のタイムラインだけでは自分としてはとてもコントロール不可能な存在のため、その他の機能やサービスを使ってうまくフォローしていくと言うような使い方をしています。

もちろんコントロール可能なまでにフォローする人を絞っておくと言うことでも実現可能です。


しかし、Twitter上に流れるつぶやきは発言者の日常に絡むもので、自分が満足するだけの情報量を常に与えてくれるとも限りません。

仕事が忙しい人はつぶやきも減るでしょうし、常に質の高い情報だけをつぶやいているわけでもありません。

タイムラインを何回も眺めてみても情報が全く流れていないより、何らかの情報が流れていた方が自分では楽しいと考えたから、フォローする人を増やす行為をしてみたりしました。


自分にとって、Twitterのタイムラインのイメージは町並みを鳥瞰しているようなもので、フォローしている人たちがその町の中で議論していたり、ぶつぶつ一人でつぶやいていたりするものだったりします。

なので公式RTの機能にあるような、自分のフォローしている人がフォローしている(自分からみたらフォローしていない人)の情報を出してくれるような仕様にしてくれても、あまり気になったりしません。

それは、町がそれだけにぎやかな方が自分も眺めている楽しさが生まれるからだったりします。



タイムラインは誰のもの?


Twitterのタイムラインは、自分にとって何らかの得になりそうな人をフォローして形成します。

知り合いであれば、その人の日常が知れますし気軽に情報を送りあうことができます。

知らない人であれば、自分と趣味・思考が近い人から有益な情報を得ようとしますし、気軽に意見交換することでコミュニティを生み出すこともできます。


ただ、その作り上げたタイムラインと言うのは自分のオリジナルであっても、その一つ一つのつぶやきは発言者自身のものであって、それを強制することはできません。

なので、そのフォローしている人が別の人の発言が気に入ったから公式RTでフォローしていない人のタイムライン上に出したとしても、仕様としては気持ち悪くともそれさえも発言の一部と考えれば、当然コントロール不可能なものだったりします。


これは非公式RTでも同様にできることです。

非公式RTの場合は、RTされすぎると元の発言(または発言者)がわからなくなることがありますから、ソースを明確にすると言う意味で意図的に使っている人もいるのかもしれません。


どういう理由で公式RTのような仕様が生まれたかわかりませんが、自分がフォローしている人が気になっている人は、自分から見ても気になるものだろう、という考えかもしれません。

そこから新たな発見もあるでしょうし、それさえもつぶやきの一部と考えればあまり気にせずに読むかスルーするかでよいのではないかなと思ったり。


もちろん140字という短い文章ですので、目に入った瞬間に大体読みきってしまうことからつぶやきをスルーすることが難しかったりもします。

それ故に関係ないつぶやきは表示したくないという人もいるかもしれません。


しかし、発言者も人でありTwitterの使い方はそれぞれです。

機械的に自分にとって有益になることだけをつぶやくわけでもありません。

当たり前のことになったりしますが、タイムラインを彩る人々は自由につぶやき、それをフォローする自分もフォローする自由があったりします。

Twitterの面白さは整形化した情報をPOSTするのではなく、まとまりが無くても脳内の考えを簡単につぶやけ、それを見ることができるところではないかと思ったりします。

自分としては、タイムラインはコントロールするんじゃ無く、その中に身をそっとゆだねてみた方が合っているのではないかと思うわけです。



業界の違う人と話したりすると色んな視点の話が聞けて面白かったりします。

一方で、その話から自分の能力の無さややっていることのスケールの違いを感じたりすることもしばしば。

ですが、そういう自分に無いものを知るということは強みにもつながるのかなと思ったり。



無いものを理解するという強み


以前に読んだ「小飼弾のアルファギークに逢ってきた (WEB+DB PRESS plusシリーズ) 」の中で、こんなフレーズがあったことを思い出しました。


たぶん僕の強みは、何が無いのかがわかることだと思うんですよ。何があるって言うのは普通の人でもよくわかる。でも僕は、何がないかがわかるんですよ。この本には何が書いていません、がわかるんですよ。たぶん、それが僕の一番の強みです。

無いものを理解するというのは、あるべき姿というものが想像できないとわかりませんし、無いものを無いとして受け入れる強さというものも必要になってきます。

私たちはしばしば、それを「あの人と自分は違う」とか「それは環境が良かったから」とか、逃げたりもするんですが、無いものを理解するというのは、自分の無力な部分をきちんと整理するということにもなります。


それは、何が無いかわかるからこそ、それをどう補うかということがわかったりしますし、目的をクリアするために何を足せば良いのかということを理解することにもつながります。

無いものを整理するということは、精神的に強くなければならなかったりもしますが、それを乗り切ることで見えるものというものは大きいんじゃないかなと。



無いのであれば補うという考え


無いのであれば無いなりに対策というものも打てるでしょう。

自分で能力を磨くこともできますし、それが著しく難しいのであれば他から補うということも考えられます。

別の専門の業者に依頼することもできるでしょうし、その能力を持った人を活用することも手段として選択ができます。


諦めて何もしないよりは、無いものをきちんと整理した方が次につながる考え方なのかなと。

人間誰しも万能ではないので、得て不得手はあるものでしょうから、その不得意な部分または専門としない部分というものをどうやって上手く補うか、ということを割り切ってしまう方が賢いのかなと思ったりします。


ただ、無いのがわかるというのは凄く難しい。

全体感が見えてないと足りない部分というものもが出てきませんし、これでいけると思って踏み出しても怪我をすることになります。

怪我をして足りないものがわかるというのも一つの経験ですが、無いものを予め考えておけば怪我の程度も低く済むかもしれません。


それを補うのもまた他の人の視点なのかなとも思ったりします。

自分の中の世界というのは結構小さいもので、他人の考えを聞くとそれを痛感したりもします。

そもそも自分にその考えが無いのであれば他からまかなうしか方法が無いですしね。


他人と比べることを嫌う人は多かったりしますが、劣等感に浸ったりするのではなく、冷静に自分の成しえる目的のためにあと何が無いのか、どうやって補えばよいのかと考えてみる価値って凄くあるんだなと感じたりします。