参加者は主催の +Takashi Yokoyama さん、+Takanobu Hagino さん、私の3名でした。
今回はGoでWebSocketを叩きました。週中にHaginoさんが先行して触られていたので、要所で説明を頂きながら進めて行きました。
まずはgolang-samples/websocket/simpleのソース(main.goとindex.html)とgo.net/websocketのドキュメントをにらめっこしました。
クライアント側のサンプルとして、昨年、Haginoさん主催で開催された「HTML5を業務アプリで使うための勉強会」でのファイルが紹介されたので懐かしかったです。
# サンプルの中で対象となるファイルは「sample01.html」と「sample01.js」です。
# 私ができたのは、そんなお二人の姿を向かいの席から暖かく見守ることのみ...q@w@p
その後、Haginoさんから「チャットを作ってみよう」という提案があったので、そちらにチャレンジしましたが、私の結果は半分成功で半分失敗(^^;) 原因はHaginoさん作のソースを中途半端に実装していたためでした。
ちなみに、半分成功で半分失敗の挙動は、Webブラウザーにて2つのウィンドウからアクセスした後、メッセージを送ると片方のウィンドウにしか表示されないというものです。
以下、記録として、そんな私の半々ソース(?)です。
package main
import (
"code.google.com/p/go.net/websocket"
"io"
"net/http"
"sync"
)
var (
mux sync.Mutex
clientMap = make(map[*websocket.Conn]bool)
)
func addClient(ws *websocket.Conn) {
mux.Lock()
defer mux.Unlock()
_, ok := clientMap[ws]
if !ok {
clientMap[ws] = true
}
}
func echoHandler(ws *websocket.Conn) {
addClient(ws)
for k, _ := range clientMap {
io.Copy(k, ws)
}
}
func main() {
http.Handle("/echo", websocket.Handler(echoHandler))
http.Handle("/", http.FileServer(http.Dir(".")))
err := http.ListenAndServe(":8080", nil)
if err != nil {
panic("ListenAndServe: " + err.Error())
}
}
後日、タイムリーにQiitaへ「WebSocketをGoで触ってみた」という記事が投稿されたので、見直しておきます。
次回は、9/11(木)に東京で開催された「GolangTestNight (Gunosy.go#10)」の各発表資料を読み進めるようです。
0 件のコメント:
コメントを投稿