package main
import (
"bytes"
"encoding/binary"
"flag"
"fmt"
"log"
"time"
"net/http"
"github.com/gorilla/websocket"
)
var addr = flag.String("addr", "localhost:8080", "http service address")
var upgrader = websocket.Upgrader{} // use default options
func pulse(w http.ResponseWriter, r *http.Request) {
c, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Print("upgrade:", err)
return
}
defer c.Close()
for {
data := bytes.Buffer{}
err = binary.Write(&data, binary.LittleEndian, time.Now().Unix())
if err != nil {
fmt.Println("binary.Write failed:", err)
}
err = c.WriteMessage(websocket.BinaryMessage, data.Bytes())
if err != nil {
log.Println("write:", err)
break
}
time.Sleep(1000 * time.Millisecond)
}
}
func main() {
flag.Parse()
log.SetFlags(0)
http.HandleFunc("/log", pulse)
log.Fatal(http.ListenAndServe(*addr, nil))
}
package main
import (
"bytes"
"encoding/binary"
"flag"
"log"
"net/url"
"github.com/gorilla/websocket"
)
var addr = flag.String("addr", "localhost:8080", "http service address")
func main() {
flag.Parse()
log.SetFlags(0)
u := url.URL{Scheme: "ws", Host: *addr, Path: "/log"}
log.Printf("connecting to %s", u.String())
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
log.Fatal("dial:", err)
}
defer c.Close()
for {
_, message, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
return
}
var t int64
data := bytes.NewReader(message)
err = binary.Read(data, binary.LittleEndian, &t)
if err != nil {
log.Println("read:", err)
return
}
log.Printf("recv: %v", t)
}
}