北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

Server::Starter を利用できるサーバの実装

http://qiita.com/hiratara/items/2dacf8470c378b130d5c に書いたとおり。

下回りが苦手なので色々調べたのだけど、今回もGREEhttps://github.com/gree/haskell-prefork なるリポジトリが役に立った。 fork するだけじゃんと思って中を読むと、環境変数仕掛けた上で createProcess 使って自分自身を再度立ち上げる と言った涙ぐましい実装をしていたりする。古い unix パッケージの forkProcess のマルチコアで動いているとフォークできないみたいな制約を嫌ったのか、もしくは別のハマりどころがあってこんな実装をしているのか。

今回一番ハマったのが O_NONBLOCK にしないといけないってことだったのだけど、先のGREEのパッケージの例だと元のファイルディスクリプタHaskell で作っているので問題にならなかったのね、きっと。ちなみにその問題は、 waiのこのissued を見て解決した。

以前 Test::TCP 的なもの探したときもGREEhttps://github.com/gree/haskell-test-sandbox に当たった記憶がある。GREEすごい。