Go语言如何通过Socket连接FastAPI的WebSocket接口URL?
报错根因
net.Dial是用于建立底层TCP连接的接口,仅支持IP:端口格式的寻址参数,无法识别带路径的URL,这是你遇到报错的直接原因- 你要对接的FastAPI接口是WebSocket协议,它是基于HTTP握手后升级的应用层协议,不能直接用裸TCP连接传输数据,必须用WebSocket客户端实现来完成协议握手、帧封装解析等逻辑
正确实现方式
Go标准库没有内置WebSocket的实现,生态中最常用的第三方实现是gorilla/websocket,使用步骤如下:
安装依赖
执行命令:go get github.com/gorilla/websocket替换原有代码为以下内容
package main import ( "bufio" "fmt" "net/url" "os" "github.com/gorilla/websocket" ) func main() { // 构造标准WebSocket连接地址,ws为协议标识,拼接主机端口和接口路径 wsUrl := url.URL{Scheme: "ws", Host: "127.0.0.1:8000", Path: "/register"} fmt.Printf("正在连接: %s\n", wsUrl.String()) // 发起WebSocket连接,自动完成握手升级 conn, _, err := websocket.DefaultDialer.Dial(wsUrl.String(), nil) if err != nil { panic(fmt.Sprintf("连接失败: %v", err)) } defer conn.Close() scanner := bufio.NewScanner(os.Stdin) for { fmt.Print("请输入要发送的内容: ") if !scanner.Scan() { break } sendText := scanner.Text() // 发送文本类型消息 if err := conn.WriteMessage(websocket.TextMessage, []byte(sendText)); err != nil { fmt.Printf("发送消息失败: %v\n", err) return } // 读取服务端返回 _, respMsg, err := conn.ReadMessage() if err != nil { fmt.Printf("接收消息失败: %v\n", err) return } fmt.Printf("服务端返回: %s\n", respMsg) } }
这段代码可以直接运行,和你现有FastAPI服务的WebSocket接口完全兼容。
内容的提问来源于stack exchange,提问作者Phong Phạm
相关产品推荐
相关产品推荐

