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

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

無法弄清楚如何將緩沖區與二進制 Web 套接字一起使用

無法弄清楚如何將緩沖區與二進制 Web 套接字一起使用

Go
長風秋雁 2023-06-05 17:13:06
每個人!我正在嘗試讓我的 go 代碼與 openstack 串行控制臺一起工作。它通過網絡套接字公開。我有問題。我找到了 gorrilla websocket lib(很棒)并以此示例作為參考通過一些調整,現在我有這樣的代碼:package mainimport ("log""net/url""os""os/signal""time""net/http""github.com/gorilla/websocket")func main() {DialSettings := &websocket.Dialer {? ? Proxy:? ? ? ? ? ? http.ProxyFromEnvironment,? ? HandshakeTimeout: 45 * time.Second,? ? Subprotocols: []string{"binary",},? ? ReadBufferSize: 4096,? ? WriteBufferSize: 4096,}log.SetFlags(0)interrupt := make(chan os.Signal, 1)signal.Notify(interrupt, os.Interrupt)u, _ := url.Parse("ws://172.17.0.64:6083/?token=d1763f2b-3466-424c-aece-6aeea2a733d5") //websocket url? as it outputs from 'nova get-serial-console test' cmdlog.Printf("connecting to %s", u.String())c, _, err := DialSettings.Dial(u.String(), nil)if err != nil {? ? log.Fatal("dial:", err)}defer c.Close()done := make(chan struct{})go func() {? ? defer close(done)? ? for {? ? ? ? _, message, err := c.ReadMessage()? ? ? ? if err != nil {? ? ? ? ? ? log.Println("read:", err)? ? ? ? ? ? return? ? ? ? }? ? ? ? log.Printf("%s", message)? ? }}()c.WriteMessage(websocket.TextMessage, []byte("\n")) //just to force output to consolefor {? ? select {? ? case <-done:? ? ? ? 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? ? }}}
查看完整描述

1 回答

?
倚天杖

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

日志包將每條日志消息寫在單獨的行中。如果日志消息不以換行符結尾,那么日志包將添加一個。

這些額外的換行符會混淆輸出。要修復輸出,請將對的調用替換log.Printf("%s", message)為不向輸出添加換行符的函數。以下是一些選項:

將消息寫入 stderr(與默認日志包配置相同的目的地):

os.Stderr.Write(message)

將消息寫入標準輸出(寫入程序輸出的更常規位置):

os.Stdout.Write(message)


查看完整回答
反對 回復 2023-06-05
  • 1 回答
  • 0 關注
  • 123 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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