Go에서 net/http 응답의 기본 소켓 액세스
소개
중 Go의 net/http 패키지를 사용하여 웹 애플리케이션을 개발하려면 HTTP 응답과 관련된 기본 소켓에 액세스해야 할 수도 있습니다. 이를 통해 소켓에서 TCP_INFO 시스템 호출과 같은 추가 플랫폼별 작업을 실행할 수 있습니다.
솔루션
요청 컨텍스트 사용(Go 1.13 및 이후)
Go 1.13 이상에서는 net.Conn 객체를 요청 컨텍스트에 저장할 수 있으므로 핸들러 기능 내에서 쉽게 액세스할 수 있습니다.
<code class="go">func GetConn(r *http.Request) (net.Conn) { return r.Context().Value(ConnContextKey).(net.Conn) }</code>
RemoteAddr 및 연결 맵 사용(Go 1.13 이전)
TCP 포트를 수신하는 서버의 경우 글로벌 맵을 사용하여 각 연결의 RemoteAddr에서 고유 키를 생성할 수 있습니다.
<code class="go">func GetConn(r *http.Request) (net.Conn) { return conns[r.RemoteAddr] }</code>
UNIX 소켓용 RemoteAddr 재정의
UNIX 소켓을 수신하는 서버의 경우 RemoteAddr은 항상 "@"이므로 이전 접근 방식이 효과적이지 않습니다. 이 문제를 해결하려면 net.Listener.Accept()를 재정의하고 RemoteAddr() 메서드를 재정의하세요.
<code class="go">type remoteAddrPtrConn struct { net.Conn ptrStr string } func (self remoteAddrPtrConn) RemoteAddr() (net.Addr) { return remoteAddrPtr{self.ptrStr} }</code>
추가 참고 사항
위 내용은 Go에서 net/http 응답의 기본 소켓에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!