スポンサーサイト 

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

WebSocket解決編 

解決しました!!
$GOROOT/src/pkg/server.go
の"ServeHTTP"関数を
/ ServeHTTP implements the http.Handler interface for a Web Socket.
func (f Handler) ServeHTTP(c *http.Conn, req *http.Request) {
var _, ok = req.Header["Upgrade"];
if ok == false {
c.WriteHeader(http.StatusNotFound)
io.WriteString(c, "must use websocket to connect here")
return
}
_, ok = req.Header["Connection"];
if ok == false {
c.WriteHeader(http.StatusNotFound)
io.WriteString(c, "must use websocket to connect here")
return
}
if req.Method != "GET" || req.Proto != "HTTP/1.1" ||
req.Header["Upgrade"] != "WebSocket" ||
req.Header["Connection"] != "Upgrade" {
c.WriteHeader(http.StatusNotFound)
io.WriteString(c, "must use websocket to connect here")
return
}
rwc, buf, err := c.Hijack()
if err != nil {
panic("Hijack failed: ", err.String())
return
}
defer rwc.Close()
origin := req.Header["Origin"]
location := "ws://" + req.Host + req.URL.Path

// TODO(ukai): verify origin,location,protocol.

buf.WriteString("HTTP/1.1 101 Web Socket Protocol Handshake\r\n")
buf.WriteString("Upgrade: WebSocket\r\n")
buf.WriteString("Connection: Upgrade\r\n")
buf.WriteString("WebSocket-Origin: " + origin + "\r\n")
buf.WriteString("WebSocket-Location: " + location + "\r\n")
protocol := ""
// canonical header key of WebSocket-Protocol.
if protocol, found := req.Header["Websocket-Protocol"]; found {
buf.WriteString("WebSocket-Protocol: " + protocol + "\r\n")
}
buf.WriteString("\r\n")
if err := buf.Flush(); err != nil {
return
}
ws := newConn(origin, location, protocol, buf, rwc)
f(ws)
}

と書き換えて再コンパイル。
で、
再コンパイルの時に今までは、
$ cd $GOROOT/src
$ make all

だったのですが、最新リリースでは
$ cd $GOROOT/src
$ ./all.bash

に変わったようです。
よくわかんねぇけど。

コメント

コメントを投稿















管理者にだけ表示を許可する

トラックバック

この記事のトラックバックURL
http://trainfandiary.blog14.fc2.com/tb.php/341-7ccb401d

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。