亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用大猩猩連接到網絡襪子?

如何使用大猩猩連接到網絡襪子?

Go
呼如林 2022-08-09 16:58:07
我希望看到一個最小而簡單的例子,說明如何使用大猩猩連接到websocket。我發現連接到websocket的唯一例子是這個,但我無法理解它,我找不到它是如何工作的解釋。編輯:第 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()
查看完整描述

1 回答

?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

該示例說: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,該 goroutine 在循環中讀取來自(websocket 連接)的消息并將其打印出來。當讀取失敗時,它會停止,這會發生錯誤和連接關閉。c


主 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。當讀取器完成時,它關閉通道,該通道也發出此循環的信號,并退出。doneselect


最后,有一個“中斷”選擇來處理Ctrl+C,干凈利落地停止客戶端。


要回答您的具體問題:


第 20 行:此標志使您能夠在執行程序時從命令行設置地址,而不是對其進行硬編碼。例如,您可以稱它為設置其他端口。另請參見 https://gobyexample.com/command-line-flagsclient -addr localhost:9044


第26行:是的,這是為了;另請參見 https://gobyexample.com/signalsCtrl+C


第 32 行:是程序包中預配置的撥號程序。根據文檔,它相當于DefaultDialerwebsocket


var DefaultDialer = &Dialer{

    Proxy:            http.ProxyFromEnvironment,

    HandshakeTimeout: 45 * time.Second,

}

第 60 行:WriteMessage 采用 一個 ,因此您必須將字符串轉換為[]byte[]byte


查看完整回答
反對 回復 2022-08-09
  • 1 回答
  • 0 關注
  • 109 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號