如何使用大猩猩连接到网络套接字?

Ellandor

我想看到一个简单简单的示例,说明如何使用大猩猩连接到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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

大猩猩网络套接字,在一个事件中有多个消息

使用golang从连接到网络接口的原始套接字读取

Binance API 如何使用 Javascript 连接网络套接字?

如何查找已连接套接字使用的网络接口

如何使用akka连接到Unix套接字?

如何使用套接字将Arduino连接到C ++?

如何使用套接字连接到FTP服务器?

如何使用套接字或curl连接到mysql

如何将套接字连接到本地网络上的服务器套接字?

无法使用javascript连接网络套接字

使用asynctask android连接到套接字

python套接字未连接到其他网络

如何与大猩猩Mux建立无状态连接?

如何使用url将python套接字客户端连接到服务器套接字?

如何在http.TimeoutHandler中使用大猩猩mux

如何使用大猩猩/ mux在多个文件中拆分URL?

网络/套接字连接问题

连接到Web套接字

如何使用 libnl 和 netlink 套接字以编程方式将设备连接到 AP?

如何在docker中使用unix套接字将nginx连接到php-fpm

如何使用 Android Java 有效地连接到蓝牙设备套接字?

我如何作为 golang 中的大猩猩的客户端连接到 golang 中的 3rd 方 ws 服务?或者不可能?

如何将用户连接到套接字

如何优雅地重新连接到套接字

如何快速连接到套接字以读取和写入数据

Django通道套接字未连接到使用者

使用域名无端口连接到Java套接字

Laravel中拒绝使用套接字连接到DB

使用python在无限循环中连接到套接字