ΠΠΏΠΈΡΠΈΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ Π²Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ
Π§Π΅ΡΠΊΠΎΠ΅ ΠΈ ΠΊΡΠ°ΡΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ.
ΠΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΎΡΠ²Π΅ΡΠ° Π² client.go
β¦
ΠΠ΅ΡΡΠΈΠΈ
ΠΠ΅ΡΡΠΈΡ Go:
go version
go Π²Π΅ΡΡΠΈΡ go1.12.7 windows / amd64
β¦
"ΠΠΎΠΊΠ°ΠΆΠΈ ΠΌΠ½Π΅ ΠΊΠΎΠ΄!"
ΠΠ΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΈΠ½Π°ΡΠ΅ Π½Π°ΠΌ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π³Π°Π΄Π°ΡΡ!
β¦
// client.go
package main
import (
"flag"
"fmt"
"log"
"net/http"
"net/url"
"os"
"os/signal"
"encoding/json"
"github.com/gorilla/websocket"
)
var (
addr = flag.String("addr", "127.0.0.1:17505", "http service address")
path = flag.String("path", "/ws", "ws path")
auth = flag.String("auth", "","auth key")
data = flag.String("data", "ping","put data,eg: ping")
)
func usage() {
fmt.Printf("Usage Example: %s -data 'ping'\n", os.Args[0])
fmt.Printf("Usage Example: %s -data '%s'\n", os.Args[0],
`{reqid:"10000",eid:"11111",action:"on",uptime:"1111111"}`)
flag.PrintDefaults()
}
func init(){
flag.Usage = usage
}
func main() {
flag.Parse()
log.SetFlags(0)
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt)
u := url.URL{Scheme: "ws", Host: *addr, Path: *path}
log.Printf("connecting to %s", u.String())
h := http.Header{"X-Websocket-Key": []string{*auth} }
c, _, err := websocket.DefaultDialer.Dial(u.String(), h)
if err != nil {
log.Fatal("dial:", err)
}
defer c.Close()
// print request header
h2, _ := json.Marshal(h)
fmt.Printf("request header: %s\n",h2)
done := make(chan struct{})
go func() {
defer close(done)
for {
_, message, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
return
}
log.Printf("recv: %s", message)
}
}()
err = c.WriteMessage(websocket.TextMessage, []byte(*data))
if err != nil {
log.Println("write:", err)
return
}
fmt.Println("send: ",*data)
for {
select {
case <-done:
return
case <-interrupt:
log.Println("interrupt")
err := c.WriteMessage(websocket.CloseMessage,
websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
if err != nil {
log.Println("write close:", err)
return
}
return
}
}
}
c, resp, err := websocket.DefaultDialer.Dial(u.String(), h)
header := resp.Header
c, resp, err := websocket.DefaultDialer.Dial(u.String(), h) header := resp.Header
ΠΡΡΡΠΎ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅. :-)
ΠΠ°ΠΊΡΡΡΠΈΠ΅ ΠΊΠ°ΠΊ ΡΠ΅ΡΠ΅Π½Π½ΠΎΠ΅, Π½ΠΎ Π΄Π°ΠΉΡΠ΅ Π½Π°ΠΌ Π·Π½Π°ΡΡ, Π΅ΡΠ»ΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡ Π΅ΡΠ΅ Π²ΠΎΠΏΡΠΎΡΡ.
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ