技術

ひとりアドベントカレンダー2015 第25日目 〜 PHPer でもソケットプログラミングしてみたい その4(チャットサーバー作るぞ)

25日目!!!

いよいよぉ、最終日を迎えたぜぇ、おいぃ?今日オレたちはなりふり構わず行くからな!

とか書いて元ネタ分かる人いらっしゃいますかね・・・

最終日ですがあまり特別なこともなく粛々と書くのみです。きのうの select() で多重化したエコーサーバーをチャットサーバーに仕立てあげたいと思います。

続きを読む

ひとりアドベントカレンダー2015 第24日目 〜 PHPer でもソケットプログラミングしてみたい その3(select()で多重化するぞ)

24日目!!

クリスマスイブでもお構いなしに書き続けます!(かなしみ)

今日はエコーサーバーの多重化をきのうとは違った方法でやってみます。マルチスレッドは断念したので、3つあげたうちの一つめ、「シングルプロセス・シングルスレッドで select() や poll() を使う」というやつですね。きのうやったのはマルチプロセスで接続しているただ一つのソケットが read() で読めるようになるまでブロックする、というやつでしたが、select() は複数の接続中のソケットの状態が変化した時(読めるようになった、新しく接続が来た、などのイベントが発生したとき)に関数がリターンするというものです。ではコードを見ていきましょう。

続きを読む

ひとりアドベントカレンダー2015 第23日目 〜 PHPer でもソケットプログラミングしてみたい その2(多重化するぞ)

23日目です!!

今日はきのうのエコーサーバーの続きです。きのうのまとめで予告したとおりデーモン化と多重化をやってみたいと思います。デーモン化することでサーバーはバックグラウンドプロセスとして動作するようになります。また、多重化することで複数のクライアントを同時に処理できるようになります。よりサーバーらしくなりますよね。

はじめに、 今回書いたプログラムを貼ります:

続きを読む

ひとりアドベントカレンダー2015 第22日目 〜 PHPer でもソケットプログラミングしてみたい

22日目になりました。完走までもう一息。

きょうも引き続き「ぺちぱーでも○○してみたい」シリーズをお届けです。お題はソケットプログラミング。PHP 公式マニュアルの例に沿って簡易なエコーサーバーを作ってみます。

ソケットとは?

ソケットは UNIX 系 OS におけるプロセス間通信に使う API です。Wikipedia によると、

続きを読む

ひとりアドベントカレンダー2015 第21日目 〜 PHPer でもデーモンになってみたい

21日目です!!

きょうも引き続きぺちぱーシリーズをお送りします。その名も 「PHPer でもデーモンになってみたい」です。デーモン(daemon)とは悪魔のこと、ではなくUNIX などのマルチタスク OS においてバックグラウンドプロセスとして動作するプログラムのことです。このプログラムを実行しているプロセスをデーモンプロセスと言ったりします。いわゆるサーバープログラムはデーモンであることが多いです。以下では PHP のプログラムをこのデーモンとして作ってみたいと思います。

続きを読む

ひとりアドベントカレンダー2015 第20日目 〜 PHPer でもマルチスレッドしてみたい

20日目!

PHPバイナリプログラミングシリーズは終わりましたが、引き続き PHP ネタで行きます(もう最後まで行ってしまうか?)

今日は PHP でマルチスレッドプログラミングに挑戦してみます。ふつう、PHP で並行/並列処理をする場合はプロセスを多重化しますが、実はスレッドを使うこともできます。pecl に pthreads というライブラリがあるのでこれを使います:

pthreads) http://php.net/manual/ja/book.pthreads.php

これを使うには PHP 本体がスレッドセーフオプション付きでビルドされている必要があります。通常はこのオプションはついていないことが多いので今回は PHP をビルドするところからやろうと思います。

続きを読む

ひとりアドベントカレンダー2015 第18日目 〜 PHPer でもバイナリをいじってみたい その3

18日目です。

今日は 「PHPer でもバイナリをいじってみたい」の第3回です。PHP でバイナリプログラミングをするうえでもっとも重要な2つの関数 pack()  と unpack()  について書いてみたいと思います。これらはバイナリデータの読み書き、すなわちバイナリ文字列とPHPの数値型との相互変換に使われます。

 

続きを読む