我正在使用golang samples之一来构建WebSocket服务器。根据示例,结构Client
访问websocket.Conn
here和websocket.Conn
使用Request
方法返回*http.Request
。
我的想法是根据用户输入应用的子域名将用户订阅到不同的渠道。
那么订阅websocket时可以获得用户点击的完整URL吗?使用示例代码,我认为ws.Conn.Request().URL.Host
会给我类似ws://channel1.lvh.me:8080/sync
的内容,但我会得到路径:“/ chat”。
是否可以获取用户用于连接websocket的完整URL?提前谢谢。
答案 0 :(得分:1)
检查host header以获取请求的主机:
host := c.Request().Host
从HTTP请求URI解析Request.URL字段。对于大多数请求,请求URI仅包含路径和查询。
应用程序可以从主机头重建完整的URL,并了解应用程序所服务的协议。例如,如果应用程序正在侦听HTTP请求(或使用HTTP进行握手的WS请求),则完整的URL为:
u := *c.Request().URL
u.Host = c.Request().Host
u.Scheme = "http"
答案 1 :(得分:0)
func (*Conn) Request
返回*http.Request
func (ws *Conn) Request() *http.Request
检查http
包中的http.Request
,您会发现它具有URL *url.URL
类型。这意味着您应该获得完整的网址:
ws.Request().URL.Path