nbio
nbio copied to clipboard
WebSocket 使用 http 代理时会跳 `unexpected EOF`
过程
翻源码发现下面这部分的 port := req.URL.Scheme 导致 host 没有端口号时 scheme 会被错误地拼接到本应是 port 的位置,由于我的场景只需要使用 wss,自行将 port 固定在 443 就解决问题了,但还有没有更深层的没发现的问题就暂时未知了
https://github.com/lesismal/nbio/blob/ebf799f01754b31bcb5aa7e0106f1657bcb12cdf/nbhttp/client_conn.go#L217-L223
复现
var proxy = "http://127.0.0.1:1080" // <- 这个需要连得上,随便起一个代理服务即可
var target = "wss://echo.websocket.org" // <- 这个不太重要
var err error
func main() {
engine := nbhttp.NewEngine(nbhttp.Config{})
err = engine.Start()
if err != nil {
fmt.Printf("nbio.Start failed: %v\n", err)
return
}
// proxy
log.Println("using proxy:", proxy)
proxyURL, err := url.Parse(proxy)
log.Println(proxyURL, err)
dialer := &websocket.Dialer{
Engine: engine,
Upgrader: websocket.NewUpgrader(),
Proxy: http.ProxyURL(proxyURL), // <- 这行注释掉马上可用
}
_, _, err = dialer.Dial(target, nil)
log.Println(err) // unexpected EOF
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt)
<-interrupt
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
defer cancel()
engine.Shutdown(ctx)
}
看起来本来是要根据 scheme 来判断默认端口但只写到一半,只能请作者来看看了
感谢反馈!
最近几个月github的未读消息提示不太给力,漏看了消息,肉身轮训才扫到这个issue,抱歉回复晚了。
这块代码取url.Schema确实是错误的,刚提交了下,增加了对默认端口的处理: https://github.com/lesismal/nbio/commit/db87716a8e431cda9835c86ffa256e564881b04f
可以试试这个版本是否ok:
go get -u github.com/lesismal/nbio@db87716a8e431cda9835c86ffa256e564881b04f
感谢,更新后的版本是可用的
感谢,更新后的版本是可用的
感谢!我先看看近期有没有其他要提交的,过阵子再发个版本。