技術ネタ: 2015年5月アーカイブ
久しぶりに技術ネタでも。
大学院の授業でオレオレプロトコルを作る授業がありまして、作ったは良いけどどこかにサクッとデプロイできないかなー、herokuとか良いんじゃないかなー、いや、でもherokuって基本はHTTPのサービスじゃなかったかな、いや、どうだろう?探してみるか?
という事で、ありました。
Ruppell's Sockets | Heroku Dev Center
好きなsocketプログラミングをherokuにデプロイできるぜ!みたいなaddonのようです。 後述しますが、内部的にはsshポートフォワードで実現してるっぽいです。
heroku addons:create ruppells-sockets
こちらのaddonを乗せて
git submodule add https://bitbucket.org/ruppells/sockets-connect.git lib/sockets-connect
gitのsubmoduke突っ込んで
echo 'socket: ./lib/sockets-connect/rs-conn ./any_start_command' > ./Procfile
Procfileに socket コマンドで ./lib/sockets-connect/rs-conn から起動コマンドをキックさせるように記述します。 コマンドが複雑な場合は1つのシェルスクリプトなんかにまとめておけば問題ありませんね。
git add .; git commit -m "Add awesome configuration"; git push heroku master
あとは適宜git commitして、push
heroku config:get RUPPELLS_SOCKETS_FRONTEND_URI #-> tcp://4950.381b424d-12fa-4fad-b464-9013a482ca7f.sockets.ruppells.io:4950
内部的にはsshのポートフォワードで実現しているようなので、上記のようにしてendpointを取得します。
バックエンドのポートはデフォルトだと1337番が勝手に振られて、通信出来ないとステータスコードでエラーと言われます(heroku logs -tのログで確認できます)。 ですので、バックエンドのポートが決まってる場合は
echo 'socket: ./lib/sockets-connect/rs-conn -b 8080 ./any_start_command' > ./Procfile
みたいにして、ポートを指定します。 ですが、ここは結局バックエンドのポートなので、フロントのsshポートフォワードされた方はなんだかうまく指定出来ません...。調べれば分かるかも。
ではでは。