我想看到一个简单简单的示例,说明如何使用大猩猩连接到Websocket。
我发现连接到Websocket的唯一示例是this,但我听不懂,也找不到有关其工作原理的解释。
编辑:
第20行:
为什么他保留websocket地址flag.String
而不是可变字符串?
第26行:
这部分是否创建了一个信号,当用户按下crtl + C时会通知程序?
interrupt: = make(chan os.Signal, 1)
signal.Notify (interrupt, os.Interrupt)
第32行:
这行是做什么的?
websocket.DefaultDialer.Dial (u.String (), nil)
60行:
因为[]byte(t.String())
而不是t.string()
?
样本README
说:
客户端每秒发送一条消息,并打印收到的所有消息。
查看代码,后一部分(打印收到的所有消息)发生在这里:
go func() {
defer close(done)
for {
_, message, err := c.ReadMessage()
if err != nil {
log.Println("read:", err)
return
}
log.Printf("recv: %s", message)
}
}()
这启动了一个goroutine,该goroutinec
循环读取了来自(websocket连接)的消息并将其打印出来。当读取失败时(由于错误而发生)和关闭连接时,它将停止。
主要的goroutine会这样做:
ticker := time.NewTicker(time.Second)
defer ticker.Stop()
for {
select {
case <-done:
return
case t := <-ticker.C:
err := c.WriteMessage(websocket.TextMessage, []byte(t.String()))
if err != nil {
log.Println("write:", err)
return
}
case <-interrupt:
log.Println("interrupt")
// Cleanly close the connection by sending a close message and then
// waiting (with timeout) for the server to close the connection.
err := c.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
if err != nil {
log.Println("write close:", err)
return
}
select {
case <-done:
case <-time.After(time.Second):
}
return
}
}
它具有每秒触发的代码,将消息发送到Websocket。读取器goroutine完成后,它会关闭done
通道,并通过发出信号select
通知此循环也要退出。
最后,有一个“中断”选项可以处理Ctrl + C,完全停止客户端。
要回答您的特定问题:
第20行:使用此标志,您可以在执行程序时从命令行设置地址,而不是对其进行硬编码。例如,您可以调用它client -addr localhost:9044
来设置其他端口。另请参阅https://gobyexample.com/command-line-flags
第26行:是的Ctrl+C
;另请参阅https://gobyexample.com/signals
第32行:DefaultDialer
是程序包中的预配置拨号websocket
程序。根据文档,它等同于
var DefaultDialer = &Dialer{
Proxy: http.ProxyFromEnvironment,
HandshakeTimeout: 45 * time.Second,
}
第60行:WriteMessage使用[]byte
,因此您必须将字符串转换为[]byte
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句