Goでサーバー実装のパターン
Go言語がおもしろい。
Goでのサーバー実装の方法が、ある程度パターン化してるので覚えておこう。
ここで言うサーバーはエコーサーバーやmemcachedみたいなやつデス
package main import ( "net"; "fmt"; ) func handler(conn net.Conn) { defer conn.Close(); // 4 buf := make([]byte, 16); l, err := conn.Read(buf); if err == nil { conn.Write(buf[0:l]); } } func main() { sock, err := net.Listen("tcp", "127.0.0.1:1983"); if err != nil { fmt.Printf("error %s", err); return; } // 1 for { // 2 conn, err := sock.Accept(); if err != nil { fmt.Printf("error %s", err); return; } // 3 go handler(conn); } }
1でループし、2でAccept。そして3でコネクションをgoroutineで動かしたhandlerに渡す。
最後にロジックを4に書けば出来上がり。
クライアントも同じようにいけそうだなーたのしいなー
参考
GitHub - dustin/gomemcached: A memcached binary protocol toolkit for go.