สำหรับพร็อกซี HTTP แบบส่งต่อ ให้กำหนดค่า Dialer.Proxy ของ Gorilla URL ของ WebSocket ยังคงเป็นปลายทาง:

proxyURL, err := url.Parse("http://proxy.example:8080")
if err != nil {
    return err
}
dialer := websocket.Dialer{
    Proxy: http.ProxyURL(proxyURL),
    HandshakeTimeout: 15 * time.Second,
}
conn, response, err := dialer.DialContext(
    ctx, "wss://events.example/stream", nil)

ส่วนนี้อยู่ในฟังก์ชันเชื่อมต่อของแอปพลิเคชัน โดยมี net/url, net/http, time และ github.com/gorilla/websocket พร้อมใช้ จัดการ err และการตอบกลับ handshake ที่ล้มเหลว จากนั้นจัดการ conn ผ่านวงจรชีวิตข้อความและการปิดตามปกติ สำหรับปลายทาง WSS สาธารณะที่ได้รับอนุญาต รายการพร็อกซี HTTP มีผู้สมัครสำหรับ proxyURL

ไดอะเลอร์ของพร็อกซี HTTP เปิดการเชื่อมต่อตัวกลางและส่ง CONNECT สำหรับปลายทาง สำหรับ wss TLS ของปลายทางจะผ่านอุโมงค์ที่สร้างขึ้นก่อน handshake ของ WebSocket

NetDialContext ปรับแต่งการเชื่อมต่อ TCP ระดับล่าง การชี้ไปที่พอร์ตพร็อกซีเพียงอย่างเดียวไม่ได้ติดตั้ง CONNECT เมื่อตั้งค่า Proxy ด้วย คอลแบ็กเครือข่ายที่กำหนดเองจะเชื่อมต่อกับตัวกลาง ขณะที่ชั้นพร็อกซีจัดการการเจรจา

เก็บชื่อโฮสต์ปลายทางไว้ใน URL wss เพื่อให้การตรวจสอบตัวตน TLS ตามปกติใช้กับเซิร์ฟเวอร์ที่ตั้งใจ

บทความที่เกี่ยวข้อง