| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- // Copyright 2013 Gary Burd. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- // Package websocket implements the WebSocket protocol defined in RFC 6455.
- //
- // Overview
- //
- // The Conn type represents a WebSocket connection.
- //
- // A server application calls the Upgrade function to get a pointer to a Conn:
- //
- // func handler(w http.ResponseWriter, r *http.Request) {
- // conn, err := websocket.Upgrade(w, r.Header, nil, 1024, 1024)
- // if _, ok := err.(websocket.HandshakeError); ok {
- // http.Error(w, "Not a websocket handshake", 400)
- // return
- // } else if err != nil {
- // log.Println(err)
- // return
- // }
- // ... Use conn to send and receive messages.
- // }
- //
- // WebSocket messages are represented by the io.Reader interface when receiving
- // a message and by the io.WriteCloser interface when sending a message. An
- // application receives a message by calling the Conn.NextReader method and
- // reading the returned io.Reader to EOF. An application sends a message by
- // calling the Conn.NextWriter method and writing the message to the returned
- // io.WriteCloser. The application terminates the message by closing the
- // io.WriteCloser.
- //
- // The following example shows how to use the connection NextReader and
- // NextWriter method to echo messages:
- //
- // for {
- // mt, r, err := conn.NextReader()
- // if err != nil {
- // return
- // }
- // w, err := conn.NextWriter(mt)
- // if err != nil {
- // return err
- // }
- // if _, err := io.Copy(w, r); err != nil {
- // return err
- // }
- // if err := w.Close(); err != nil {
- // return err
- // }
- // }
- //
- // The connection ReadMessage and WriteMessage methods are helpers for reading
- // or writing an entire message in one method call. The following example shows
- // how to echo messages using these connection helper methods:
- //
- // for {
- // mt, p, err := conn.ReadMessage()
- // if err != nil {
- // return
- // }
- // if _, err := conn.WriteMessaage(mt, p); err != nil {
- // return err
- // }
- // }
- //
- // Concurrency
- //
- // A Conn supports a single concurrent caller to the write methods (NextWriter,
- // SetWriteDeadline, WriteMessage) and a single concurrent caller to the read
- // methods (NextReader, SetReadDeadline, ReadMessage). The Close and
- // WriteControl methods can be called concurrently with all other methods.
- //
- // Data Messages
- //
- // The WebSocket protocol distinguishes between text and binary data messages.
- // Text messages are interpreted as UTF-8 encoded text. The interpretation of
- // binary messages is left to the application.
- //
- // This package uses the same types and methods to work with both types of data
- // messages. It is the application's reponsiblity to ensure that text messages
- // are valid UTF-8 encoded text.
- //
- // Control Messages
- //
- // The WebSocket protocol defines three types of control messages: close, ping
- // and pong. Call the connection WriteControl, WriteMessage or NextWriter
- // methods to send a control message to the peer.
- //
- // Connections handle received ping and pong messages by invoking a callback
- // function set with SetPingHandler and SetPongHandler methods. These callback
- // functions can be invoked from the ReadMessage method, the NextReader method
- // or from a call to the data message reader returned from NextReader.
- //
- // Connections handle received close messages by returning an error from the
- // ReadMessage method, the NextReader method or from a call to the data message
- // reader returned from NextReader.
- package websocket
|