diff --git a/server/handlerequest.go b/server/handlerequest.go index 92fdfec..ccac8b7 100644 --- a/server/handlerequest.go +++ b/server/handlerequest.go @@ -9,12 +9,9 @@ import ( "github.com/foomo/contentserver/requests" "github.com/foomo/contentserver/responses" "github.com/foomo/contentserver/status" - jsoniter "github.com/json-iterator/go" "github.com/prometheus/client_golang/prometheus" ) -var json = jsoniter.ConfigCompatibleWithStandardLibrary - func handleRequest(r *repo.Repo, handler Handler, jsonBytes []byte, metrics *status.Metrics) (replyBytes []byte, err error) { var ( diff --git a/server/server.go b/server/server.go index dba4a19..bf7e249 100644 --- a/server/server.go +++ b/server/server.go @@ -8,11 +8,14 @@ import ( "github.com/foomo/contentserver/log" "github.com/foomo/contentserver/repo" + jsoniter "github.com/json-iterator/go" // profiling _ "net/http/pprof" ) +var json = jsoniter.ConfigCompatibleWithStandardLibrary + // Handler type type Handler string @@ -64,12 +67,7 @@ func runWebserver( path string, chanErr chan error, ) { - s, errNew := NewWebServer(path, r) - if errNew != nil { - chanErr <- errNew - return - } - chanErr <- http.ListenAndServe(address, s) + chanErr <- http.ListenAndServe(address, NewWebServer(path, r)) } func runSocketServer( @@ -78,12 +76,7 @@ func runSocketServer( chanErr chan error, ) { // create socket server - s, errSocketServer := newSocketServer(repo) - if errSocketServer != nil { - log.Error(errSocketServer) - chanErr <- errSocketServer - return - } + s := newSocketServer(repo) // listen on socket ln, errListen := net.Listen("tcp", address) diff --git a/server/socketserver.go b/server/socketserver.go index cb07f57..eb64d1b 100644 --- a/server/socketserver.go +++ b/server/socketserver.go @@ -18,14 +18,12 @@ type socketServer struct { metrics *status.Metrics } -// @TODO: remove error ? // newSocketServer returns a shiny new socket server -func newSocketServer(repo *repo.Repo) (s *socketServer, err error) { - s = &socketServer{ +func newSocketServer(repo *repo.Repo) *socketServer { + return &socketServer{ repo: repo, metrics: status.NewMetrics("socketserver"), } - return } func extractHandlerAndJSONLentgh(header string) (handler Handler, jsonLength int, err error) { @@ -104,12 +102,17 @@ func (s *socketServer) handleConnection(conn net.Conn) { } log.Debug(fmt.Sprintf(" found json with %d bytes", jsonLength)) if jsonLength > 0 { - // let us try to read some json - jsonBytes := make([]byte, jsonLength) + + var ( + // let us try to read some json + jsonBytes = make([]byte, jsonLength) + jsonLengthCurrent = 1 + readRound = 0 + ) + // that is "{" jsonBytes[0] = 123 - jsonLengthCurrent := 1 - readRound := 0 + for jsonLengthCurrent < jsonLength { readRound++ readLength, jsonReadErr := conn.Read(jsonBytes[jsonLengthCurrent:jsonLength]) diff --git a/server/webserver.go b/server/webserver.go index c638a45..4c5470a 100644 --- a/server/webserver.go +++ b/server/webserver.go @@ -12,19 +12,18 @@ import ( ) type webServer struct { - r *repo.Repo path string + r *repo.Repo metrics *status.Metrics } // NewWebServer returns a shiny new web server -func NewWebServer(path string, r *repo.Repo) (s http.Handler, err error) { - s = &webServer{ - r: r, +func NewWebServer(path string, r *repo.Repo) http.Handler { + return &webServer{ path: path, + r: r, metrics: status.NewMetrics("webserver"), } - return } func (s *webServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {