Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengakses Soket Dasar Tindak Balas net/http dalam Go?

Bagaimana untuk Mengakses Soket Dasar Tindak Balas net/http dalam Go?

Linda Hamilton
Lepaskan: 2024-11-06 16:15:02
asal
604 orang telah melayarinya

How to Access the Underlying Socket of a net/http Response in Go?

Mengakses Soket Dasar Tindak Balas net/http dalam Go

Pengenalan

Semasa membangunkan aplikasi web menggunakan pakej net/http Go, mungkin perlu mengakses soket asas yang dikaitkan dengan HTTP tindak balas. Ini membenarkan pelaksanaan operasi khusus platform tambahan pada soket, seperti panggilan sistem TCP_INFO.

Penyelesaian

Menggunakan Konteks Permintaan (Go 1.13 dan kemudian)

Dalam Go 1.13 dan kemudian, net.Conn objek boleh disimpan dalam Konteks Permintaan, membolehkan akses mudah dalam fungsi pengendali.

<code class="go">func GetConn(r *http.Request) (net.Conn) {
  return r.Context().Value(ConnContextKey).(net.Conn)
}</code>
Salin selepas log masuk

Menggunakan RemoteAddr dan Peta Sambungan (Pre-Go 1.13)

Untuk pelayan mendengar pada port TCP, kunci unik boleh dijana daripada RemoteAddr setiap sambungan menggunakan global peta.

<code class="go">func GetConn(r *http.Request) (net.Conn) {
  return conns[r.RemoteAddr]
}</code>
Salin selepas log masuk

Mengatasi RemoteAddr untuk Soket UNIX

Untuk pelayan mendengar pada soket UNIX, RemoteAddr sentiasa "@", menjadikan pendekatan sebelumnya tidak berkesan. Untuk menyelesaikan masalah ini, ganti net.Listener.Accept() dan takrifkan semula kaedah RemoteAddr().

<code class="go">type remoteAddrPtrConn struct {
  net.Conn
  ptrStr string
}
func (self remoteAddrPtrConn) RemoteAddr() (net.Addr) {
  return remoteAddrPtr{self.ptrStr}
}</code>
Salin selepas log masuk

Nota Tambahan

  • The Hijack() kaedah membenarkan kawalan sepenuhnya ke atas soket TCP mentah, tetapi ia adalah pendekatan yang lebih invasif.
  • The Panggilan balik ConnStateEvent boleh digunakan untuk menjejaki keadaan sambungan dan mengemas kini peta sambungan dengan sewajarnya.

Atas ialah kandungan terperinci Bagaimana untuk Mengakses Soket Dasar Tindak Balas net/http dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan