- 公開日:2016年05月27日
記事概要
APIサービスをRailsでなく、GoLangで作ることを検証しました。
その検証内容をまとめた記事です。
環境
- Centos6.5
- Go 1.6.2
- Nginx 1.8.1
初めに
スマートフォンアプリ用のAPIサービスをRailsでなく、GoLangで作るかどうかを検証しました。
以下が、最低限必要な検証項目です。
- centos6.5にgolangをインストール(済)
- golangでサーバーを動かす。
- nginx経由でgolangサーバーにアクセスする。
- golangでAPIを叩いてjsonを返却する
- mysqlに接続する。
- ログを吐き出す。
今回は、言語仕様や文法の基礎的なことは、学習しません。
長く使えそうな言語ならやっていきます。
ダメな場合の候補は、Rails, Spring, djangoです。
前回の記事で「centos6.5にgolangをインストール」したので、今回はgolangでサーバーを動かし、nginx経由でgolangサーバーにアクセスします。
golangをサーバーで動かす
Go言語をWebサーバーで動かすには、2種類の方法があります。
- GoでWebサーバーを動かす
- ApacheやNginxなどのWebサーバーで、FastCGIとしてGoを動かす
今回は、後者の「Webサーバーで、FastCGIとしてGoを動かす」方法を選択します。
php, ruby, python等のWEBサーバーと同じような仕組みにします。
GolangのWebサーバー
まずは、GolangでWebサーバーを動かします。
以下のようにWebサーバーのコードを実装します。
package main import ( "fmt" "net/http" ) func viewHandler(res http.ResponseWriter, req *http.Request) { fmt.Fprintf(res, "<h1>%s</h1><div>%s</div>", "title", "aaaaaaaa") } func main() { http.HandleFunc("/", viewHandler) http.ListenAndServe(":8190", nil) }
Golangを実行します。
go run sample.go
ブラウザでhttp://localhost:8190/にアクセスします。
画面が表示されました。
Nginx経由でGolangサーバーにアクセス
次にNginx経由で、GolangのWebサーバーにアクセスします。
まずはNginxのアプリの設定を変更します。
location / { try_files $uri $uri.html $uri/index.html @rails-unicorn; } location /golang { fastcgi_pass 127.0.0.1:8190; include fastcgi.conf; }
上記の設定をすると、domain/golangのアドレスが与えられた場合、Nginxは127.0.0.1:8190にFastCGIでリクエストします。
FastCGIは、一度起動したプログラムを一定期間、メモリ上に展開しておく仕組みです。
このサイトの説明がわかりやすいです。
Go側のコードもFastCGIを使うように修正します。GoLangには、fcgiパッケージが用意されているので、これを利用します。
package main import ( "fmt" "net" "net/http" "net/http/fcgi" ) func viewHandler(res http.ResponseWriter, req *http.Request) { fmt.Fprintf(res, "<h1>%s</h1><div>%s</div>", "hello", "fastCGI ") } func main() { l, err := net.Listen("tcp", "127.0.0.1:8190") if err != nil { return } http.HandleFunc("/", viewHandler) fcgi.Serve(l, nil) }
Nginxを再起動し、Goを実行します。
sudo service nginx restart go run sample.go
ブラウザでhttp://localhost/golangにアクセスします。
画面が表示されました。
UNIX socketを使う場合も同様にnetパッケージを利用します。
まとめ
GoLangでNginxの連携は、シンプルに実装可能です。
php, ruby, python等で連携の経験があるなら、特にはまることはないでしょう。
スクリプト言語の経験がある人には、とてもとっつきやすい仕組みだと思います。
以上。
Eskişehir
返信削除Adana
Sivas
Kayseri
Samsun
Y2KPYZ
whatsapp görüntülü show
返信削除ücretli.show
WA80W1
5B7EA
返信削除Samsun Evden Eve Nakliyat
Giresun Evden Eve Nakliyat
Sinop Lojistik
Niğde Evden Eve Nakliyat
Çorum Lojistik
B3675
返信削除Ankara Fayans Ustası
Eskişehir Şehir İçi Nakliyat
Isparta Parça Eşya Taşıma
Sakarya Şehir İçi Nakliyat
Aksaray Parça Eşya Taşıma
Giresun Şehir İçi Nakliyat
Silivri Çatı Ustası
Hatay Şehir İçi Nakliyat
Maraş Lojistik
F1FAF
返信削除Batman Evden Eve Nakliyat
Çanakkale Parça Eşya Taşıma
Tunceli Evden Eve Nakliyat
Çerkezköy Buzdolabı Tamircisi
Bitmex Güvenilir mi
Flare Coin Hangi Borsada
Sinop Lojistik
Sivas Evden Eve Nakliyat
Çerkezköy Çilingir
D8FB7
返信削除%20 referans kodu
FAB66
返信削除adana sesli sohbet odası
maraş bedava sohbet odaları
mardin yabancı görüntülü sohbet
bedava sohbet odaları
kırıkkale canlı sohbet odaları
siirt rastgele sohbet uygulaması
kırklareli rastgele sohbet odaları
mobil sohbet odaları
telefonda sohbet