gpt4 book ai didi

websocket - 在 Go 中提供 websocket

转载 作者:IT老高 更新时间:2023-10-28 13:06:14 31 4
gpt4 key购买 nike

我开始使用 websockets + go 并且我认为我误解了 Go 中 websockets 的一些非常基本的东西。

我想简单地监听一个 websocket 连接并进行相应的处理。但是,我在 Go 中看到的所有使用 websocket 的示例都在为网页提供服务,然后连接到 websocket,这是一个要求吗?

以下是我设置的基本回显服务器:

package main

import (
"fmt"
"code.google.com/p/go.net/websocket"
"net/http"
)

func webHandler(ws *websocket.Conn) {
var s string
fmt.Fscan(ws, &s)
fmt.Println("Received: ", s)
}

func main() {
fmt.Println("Starting websock server: ")
http.Handle("/echo", websocket.Handler(webHandler))
err := http.ListenAndServe(":8080", nil)
if err != nil {
panic("ListenAndServe: " + err.Error())
}
}

这是用于连接的javascript:

ws = new WebSocket("ws://localhost:8080/echo");
ws.onmessage = function(e) {
console.log("websock: " + e.data);
};

但这会导致: WebSocket 连接到 'ws://localhost:8080/echo' 失败:意外响应代码:403

最佳答案

从 Javascript 使用 websocket 时,您很少需要直接读取帧。老实说,我什至不知道该怎么做。

幸运的是,websocket 包已经有一个类型,Codec 可以为你做这件事。我的建议是使用预定义的 websocket.Message 编解码器来 RecieveSend 消息。

Message is a codec to send/receive text/binary data in a frame on WebSocket connection. To send/receive text frame, use string type. To send/receive binary frame, use []byte type.

使用 websocket.Message,您的 webHandler 将如下所示:

func webHandler(ws *websocket.Conn) {
var in []byte
if err := websocket.Message.Receive(ws, &in); err != nil {
return
}
fmt.Printf("Received: %s\n", string(in))
websocket.Message.Send(ws, in)
}

而且,不,Go 不需要为网页提供服务。您收到的 403 错误与 Go 或 websocket 包无关。

关于websocket - 在 Go 中提供 websocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19708330/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com