2011年8月28日日曜日

ただwebsocket使いたかっただけなのに

結論:geventを直で立ち上げて80番で待つ

結局geventを直で動かすだけしかないのかよ....


今作ってるサービスで、今時だったらwebsocketぐらい使わなきゃね!って思って使おうとしたところが土日ずっと調べてたらひたすらに嵌まるんですわ、これが...

そもそも今 Apache + mod_wsgi + django って組み合わせなんだけど、これにwebsocket乗っけるってだけの事ができない。

pywebsocketとかいうGoogleの中の人製のやつは、なぜかmod_python使って動くというクソ仕様。
色々事情があるのはわかるんだけど、それじゃぁ普通のPython使ってwebアプリ作ってるやつの9割は撃沈だろ。

んで、mod_wsgiとmod_python両方一個のapacheでなんとか動かないか試行錯誤してたんだが,,,,これおそらく未来がなさそうなので1日ぐらい試したあとでやめた。

で、pythonでwebsocketっていうと、他の選択肢って「geventwebsocket」ってやつぐらいしか実際にはない。もちろん自前でwebsocket鯖を書くという方法もあるが、それならこれ使った方がましだろ。

んで、使ってるとなんかこれもapacheから呼ぶのは無理っぽいのよね..
apache使うならpywebsocketしかなさげ。

じゃぁどうするかっていうとgunicornとか、nginxとか、apache以外の計量鯖使って起動するって選択肢がありそうだったのよ。

んでじゃぁ今時だし「よーしパパ nginxとgunicornでgeventwebsocket + cassandraまで使ってスタイリッシュパイソニスタ(謎)」になっちゃうぞ!とか意気込んだ訳ですよ。

んでgevent単体だったらhttpとwebsocketと両方プロトコルハンドルできてるからこれならいけるよねー、、とか思ってnginxまで入れて「んー、なんかこれhtttpは捌けるけどwebsocketのプロトコル来たらさばけなくね?」と思って見てて
という文言を発見してしまったorz

正確に言うと、どうもpatchか何かが転がってて入れればnginxでもwebsocketをgunicornのほうへリバースプロキシしてくれそうな気配はあった。けどこれ以上はもうしんどい。
動くよ、って感じのソースは
この辺。
やる気が出たらもう一度チャレンジすると思うが....今はもういいや

んで、結局、 pythonでgeventのwsgi的なスクリプト直でたたいて80番で待ってもらうことにした。
ローテクだが、動くんだからこっちの方がいい。

なんだかなー

0 件のコメント: