代码拉取完成,页面将自动刷新
package server
import (
"io"
"log"
"net/http"
"gitee.com/lople/geerpc/codec"
)
/*
客户端和服务端封装HTTP层
服务端支持 HTTP 协议:
1.客户端向 RPC 服务器发送 CONNECT 请求
CONNECT 10.0.0.1:9999/_geerpc_ HTTP/1.0
2.RPC 服务器返回 HTTP 200 状态码表示连接建立。
HTTP/1.0 200 Connected to Gee RPC
3.客户端使用创建好的连接发送 RPC 报文,先发送 Option,再发送 N 个请求报文,服务端处理 RPC 请求并响应。
*/
const (
connected = "200 connected to Gee RPC"
defalutRPCPath = "/geerpc"
defalutDebugPath = "/debug/geerpc"
)
// ServeHTTP implements an http.Handler that answers RPC requests.
func (s *Server) ServeHTTP(w http.ResponseWriter, req *http.Request) {
if req.Method != "CONNECT" {
w.Header().Set("Content-Type", "text/plain;charset=utf-8")
w.WriteHeader(http.StatusMethodNotAllowed)
io.WriteString(w, "405 must CONNECT\n")
return
}
//type assert,Hijack return origin tcp conn
conn, _, err := w.(http.Hijacker).Hijack()
if err != nil {
log.Print("rpc hijacking", req.RemoteAddr, ":", err.Error())
return
}
//return connected status ok
io.WriteString(conn, "HTTP/1.0 "+connected+"\n\n")
s.ServerConn(conn)
}
// HandleHTTP registers an HTTP handler for RPC messages on rpcPath.
// It is still necessary to invoke http.Serve(), typically in a go statement.
func (s *Server) HandleHTTP() {
codec.Init()
http.Handle(defalutRPCPath, s)
http.Handle(defalutDebugPath, debugHTTP{s})
log.Println("rpc server debug path:", defalutDebugPath)
}
// HandleHTTP is a convenient approach for default server to register HTTP handlers
func HandleHTTP() {
defaultServer.HandleHTTP()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。