Documentation ¶
Overview ¶
Package websocket implements a client and server for the WebSocket protocol. The protocol is defined at http://tools.ietf.org/html/draft-ietf-hybi-thewebsocketprotocol
Index ¶
- Constants
- Variables
- type Codec
- type Config
- type Conn
- func (ws *Conn) Close() os.Error
- func (ws *Conn) Config() *Config
- func (ws *Conn) IsClientConn() bool
- func (ws *Conn) IsServerConn() bool
- func (ws *Conn) LocalAddr() net.Addr
- func (ws *Conn) Read(msg []byte) (n int, err os.Error)
- func (ws *Conn) RemoteAddr() net.Addr
- func (ws *Conn) Request() *http.Request
- func (ws *Conn) SetReadTimeout(nsec int64) os.Error
- func (ws *Conn) SetTimeout(nsec int64) os.Error
- func (ws *Conn) SetWriteTimeout(nsec int64) os.Error
- func (ws *Conn) Write(msg []byte) (n int, err os.Error)
- type DialError
- type Handler
- type ProtocolError
- type WebSocketAddr
Constants ¶
const ( ProtocolVersionHixie75 = -75 ProtocolVersionHixie76 = -76 ProtocolVersionHybi00 = 0 ProtocolVersionHybi = 8 ContinuationFrame = 0 TextFrame = 1 BinaryFrame = 2 CloseFrame = 8 PingFrame = 9 PongFrame = 10 UnknownFrame = 255 )
Variables ¶
var ( ErrBadMaskingKey = &ProtocolError{"bad masking key"} ErrBadPongMessage = &ProtocolError{"bad pong message"} ErrBadClosingStatus = &ProtocolError{"bad closing status"} ErrUnsupportedExtensions = &ProtocolError{"unsupported extensions"} ErrNotImplemented = &ProtocolError{"not implemented"} )
var ( ErrBadProtocolVersion = ProtocolError{"bad protocol version"} ErrBadScheme = ProtocolError{"bad scheme"} ErrBadStatus = ProtocolError{"bad status"} ErrBadUpgrade = ProtocolError{"missing or bad upgrade"} ErrBadWebSocketOrigin = ProtocolError{"missing or bad WebSocket-Origin"} ErrBadWebSocketLocation = ProtocolError{"missing or bad WebSocket-Location"} ErrBadWebSocketProtocol = ProtocolError{"missing or bad WebSocket-Protocol"} ErrBadWebSocketVersion = ProtocolError{"missing or bad WebSocket Version"} ErrChallengeResponse = ProtocolError{"mismatch challenge/response"} ErrBadFrame = ProtocolError{"bad frame"} ErrBadFrameBoundary = ProtocolError{"not on frame boundary"} ErrNotWebSocket = ProtocolError{"not websocket protocol"} ErrBadRequestMethod = ProtocolError{"bad method"} ErrNotSupported = ProtocolError{"not supported"} )
var JSON = Codec{jsonMarshal, jsonUnmarshal}
JSON is a codec to send/receive JSON data in a frame from a WebSocket connection.
Trival usage:
import "websocket" type T struct { Msg string Count int } // receive JSON type T var data T websocket.JSON.Receive(ws, &data) // send JSON type T websocket.JSON.Send(ws, data)
var Message = Codec{marshal, unmarshal}
Message is a codec to send/receive text/binary data in a frame on WebSocket connection. To send/receive text frame, use string type. To send/receive binary frame, use []byte type.
Trivial usage:
import "websocket" // receive text frame var message string websocket.Message.Receive(ws, &message) // send text frame message = "hello" websocket.Message.Send(ws, message) // receive binary frame var data []byte websocket.Message.Receive(ws, &data) // send binary frame data = []byte{0, 1, 2} websocket.Message.Send(ws, data)
Functions ¶
This section is empty.
Types ¶
type Codec ¶
type Codec struct { Marshal func(v interface{}) (data []byte, payloadType byte, err os.Error) Unmarshal func(data []byte, payloadType byte, v interface{}) (err os.Error) }
Codec represents a symmetric pair of functions that implement a codec.
type Config ¶
type Config struct { // A WebSocket server address. Location *url.URL // A Websocket client origin. Origin *url.URL // WebSocket subprotocols. Protocol []string // WebSocket protocol version. Version int // TLS config for secure WebSocket (wss). TlsConfig *tls.Config // contains filtered or unexported fields }
Config is a WebSocket configuration
type Conn ¶
type Conn struct { PayloadType byte // contains filtered or unexported fields }
Conn represents a WebSocket connection.
func Dial ¶
Dial opens a new client connection to a WebSocket.
A trivial example client:
package main import ( "http" "log" "strings" "websocket" ) func main() { origin := "http://localhost/" url := "ws://localhost/ws" ws, err := websocket.Dial(url, "", origin) if err != nil { log.Fatal(err) } if _, err := ws.Write([]byte("hello, world!\n")); err != nil { log.Fatal(err) } var msg = make([]byte, 512); if n, err := ws.Read(msg); err != nil { log.Fatal(err) } // use msg[0:n] }
func DialConfig ¶
DialConfig opens a new client connection to a WebSocket with a config.
func (*Conn) IsClientConn ¶
func (*Conn) IsServerConn ¶
func (*Conn) LocalAddr ¶
LocalAddr returns the WebSocket Origin for the connection for client, or the WebSocket location for server.
func (*Conn) Read ¶
Read implements the io.Reader interface: it reads data of a frame from the WebSocket connection. if msg is not large enough for the frame data, it fills the msg and next Read will read the rest of the frame data. it reads Text frame or Binary frame.
func (*Conn) RemoteAddr ¶
RemoteAddr returns the WebSocket location for the connection for client, or the Websocket Origin for server.
func (*Conn) Request ¶
Request returns the http request upgraded to the WebSocket. It is nil for client side.
func (*Conn) SetReadTimeout ¶
SetReadTimeout sets the connection's network read timeout in nanoseconds.
func (*Conn) SetTimeout ¶
SetTimeout sets the connection's network timeout in nanoseconds.
func (*Conn) SetWriteTimeout ¶
SetWriteTimeout sets the connection's network write timeout in nanoseconds.
type Handler ¶
type Handler func(*Conn)
Handler is an interface to a WebSocket.
A trivial example server:
package main import ( "http" "io" "websocket" ) // Echo the data received on the WebSocket. func EchoServer(ws *websocket.Conn) { io.Copy(ws, ws); } func main() { http.Handle("/echo", websocket.Handler(EchoServer)); err := http.ListenAndServe(":12345", nil); if err != nil { panic("ListenAndServe: " + err.String()) } }
type ProtocolError ¶
type ProtocolError struct {
ErrorString string
}
WebSocket protocol errors.
func (ProtocolError) String ¶
func (err ProtocolError) String() string
type WebSocketAddr ¶
WebSocketAddr is an implementation of net.Addr for WebSocket.
func (WebSocketAddr) Network ¶
func (addr WebSocketAddr) Network() string
Network returns the network type for a WebSocket, "websocket".
func (WebSocketAddr) String ¶
func (addr WebSocketAddr) String() string
String returns the network address for a WebSocket.