1 // Copyright 2015 The Gorilla WebSocket Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
15 "github.com/gorilla/websocket"
18 var addr = flag.String("addr", "localhost:8080", "http service address")
20 var upgrader = websocket.Upgrader{} // use default options
22 func echo(w http.ResponseWriter, r *http.Request) {
23 c, err := upgrader.Upgrade(w, r, nil)
25 log.Print("upgrade:", err)
30 mt, message, err := c.ReadMessage()
32 log.Println("read:", err)
35 log.Printf("recv: %s", message)
36 err = c.WriteMessage(mt, message)
38 log.Println("write:", err)
44 func home(w http.ResponseWriter, r *http.Request) {
45 homeTemplate.Execute(w, "ws://"+r.Host+"/echo")
51 http.HandleFunc("/echo", echo)
52 http.HandleFunc("/", home)
53 log.Fatal(http.ListenAndServe(*addr, nil))
56 var homeTemplate = template.Must(template.New("").Parse(`
60 <meta charset="utf-8">
62 window.addEventListener("load", function(evt) {
64 var output = document.getElementById("output");
65 var input = document.getElementById("input");
68 var print = function(message) {
69 var d = document.createElement("div");
70 d.innerHTML = message;
71 output.appendChild(d);
74 document.getElementById("open").onclick = function(evt) {
78 ws = new WebSocket("{{.}}");
79 ws.onopen = function(evt) {
82 ws.onclose = function(evt) {
86 ws.onmessage = function(evt) {
87 print("RESPONSE: " + evt.data);
89 ws.onerror = function(evt) {
90 print("ERROR: " + evt.data);
95 document.getElementById("send").onclick = function(evt) {
99 print("SEND: " + input.value);
100 ws.send(input.value);
104 document.getElementById("close").onclick = function(evt) {
117 <tr><td valign="top" width="50%">
118 <p>Click "Open" to create a connection to the server,
119 "Send" to send a message to the server and "Close" to close the connection.
120 You can change the message and send multiple times.
123 <button id="open">Open</button>
124 <button id="close">Close</button>
125 <p><input id="input" type="text" value="Hello world!">
126 <button id="send">Send</button>
128 </td><td valign="top" width="50%">
129 <div id="output"></div>