Go + WS (仮)
PSOをWS使って
やってみる
2013/3/28(Wed.)
@SPDY+WS勉強会
自己紹介
アジェンダ
Go言語でWebSocket
Go言語とは(念のため)
net/httpパッケージ
package main
import "fmt"
import "net/http"
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "hello, gophers")
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
localhost:8080にアクセすると
「hello, gophers」と出る。
HandlerとHandlerFunc
type Handler interface {
ServeHTTP(ResponseWriter, *Request)
}
// ServeHTTPを実装
type HandlerFunc func(ResponseWriter, *Request)
func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request)
websocketパッケージ
構成の例
受信部
送信部
クライアントサイド
Clients
受信部
送信部
Server
ブロードキャスト
受信部
websocketパッケージの使い方
ハンドラの作成と登録
type Handler func(*Cnn)
// http.
func (Handler) ServeHTTP(w http.ResponseWriter, r *http.Request)
handler := func (ws *websocket.Cnn) {
// 受信部
// 送信部
}
http.Handle("/ws", handler)
受信部を作る
// 別のgoroutineで受信処理
go func() {
done = make(chan bool)
for {
var msg Message // 適当な型
err := websocket.JSON.Receive(ws, &msg)
if (err == io.EOF) {
done <- true
break
}
// ブロードキャストする
}
}()
送信処理を作る
for {
select {
case msg := <-ch:
websocket.JSON.Send(ws, msg)
case <-done:
return
}
}
粒子群最適化法(PSO)
+
WebSocket
何をやったのか?
分散して粒子群最適化法を行なう!
粒子群最適化法とは?
解空間
解
粒子群最適化法とは?
解空間
解
粒子群最適化法とは?
粒子群最適化法と分散処理
分散型の粒子群最適化法
解空間
=1クライアント
Server
グローバルベスト
ブロードキャスト
DEMO
まとめ