Go で Socket.IO のサーバに接続する
Node で実装した websocket のサーバにどのくらい接続できるのかを確かめるために CLI クライアントが欲しくなったので探してみた.使ってみたのは以下のもの.(たぶん)前のバージョンでコアに入ってたライブラリもあったけどちょっと簡単には扱えそうになかったので別のもので試す.
package main import ( "github.com/googollee/go-socket.io" "log" ) func main() { client, err := socketio.Dial("http://localhost:3000") if err != nil { log.Fatalln(err) return } client.On("connect", func(ns *socketio.NameSpace) { log.Println("connected") }) log.Println("start connect") client.Run() }
これでつながった.さらに以下のようにすると 100 コネクションつなぐことが出来る.
package main import ( "github.com/googollee/go-socket.io" "log" "sync" ) func main() { var wg sync.WaitGroup for i := 0; i < 100; i++ { wg.Add(1) client, err := socketio.Dial("http://localhost:3000") if err != nil { log.Println(err) return } client.On("connect", func(ns *socketio.NameSpace) { log.Println("connected") }) log.Println("connect: ", i) go client.Run() } wg.Wait() }
ただし websocket では各コネクションでファイルディスクリプタを使うためサーバおよびクライアントでそのプロセスが使えるファイルディスクリプタを確認,必要であれば大きな値を設定しておく必要がある.
$ ulimit -n 256 # 256 程度までしか接続できない $ ulimit -n 2048 # 2048 程度まで接続できるようにする