go言語で作るアドサーバー1 広告を配信する

go言語の勉強も兼ねてgo言語でAD(アド)サーバー(広告配信サーバー)を作っていくことにする。

広告配信サーバーの肝は、大量の広告へのアクセス(インプレッション)をさばくことであるから、そういう意味では、非同期IOのHTTPサーバーを簡単に作れるgo言語は、良く見る以下のようなHTTPサーバーのサンプルで、広告配信という意味では目的を達していると言える。実は大変なのは、広告管理側だったりする。

package main

import (
	"fmt"
	"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello World!")
}

func main() {
	http.HandleFunc("/",handler)
	http.ListenAndServe(":80",nil)
}

....とはいえ、これではただ単に広告を配信するだけになってしまって、広告の最適化なんかできないので、そこのところを実装していく。実装はネット広告の進化の過程を辿って行く

まずは、単なる単一広告の配信から、ローテーション広告へ

これは単純にRandで広告を配信するだけ

package main

import(
	"fmt"
	"math/rand"
	"time"
	"net/http"
	"runtime"
)

var (
	ad = []string{"[AD]広告1","[AD]広告2","[AD]広告3"}
)

func handler(w http.ResponseWriter, r *http.Request) {
	rand.Seed(time.Now().UnixNano())
	fmt.Fprintf(w,ad[rand.Intn(3)])
}

func main(){
	runtime.GOMAXPROCS(runtime.NumCPU())
	http.HandleFunc("/",handler)
	http.ListenAndServe(":8080",nil)
}