From 7dc1d366096592d8c1eccb99400a27fef000915c Mon Sep 17 00:00:00 2001 From: androlo <andreas@erisindustries.com> Date: Mon, 22 Jun 2015 23:01:19 +0200 Subject: [PATCH] read/write buffer size config option for websockets --- README.md | 12 ++++++++++-- erisdb/erisdbss/server_manager.go | 7 ++++++- server/config.go | 6 +++++- server/server.go | 1 - server/websocket.go | 5 ++--- test/server/ws_burst_test.go | 2 +- test/web_api/shared.go | 2 +- 7 files changed, 25 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 8f815a36..b9ccd650 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,9 @@ Tendermint officially supports only 64 bit Ubuntu. #### Docker -`$ ./docker_build.sh` to build the image. After that, use ` $ ./docker_run.sh` to run with the default settings. +Work in progress. + +`$ ./docker_build.sh` to build the image. After that, use ` $ ./docker_run.sh` to run with the default workdir (/home/.eris/.eris-db). ### Usage @@ -73,6 +75,8 @@ The server configuration file looks like this: [web_socket] websocket_endpoint= <string> max_websocket_sessions= <number> + read_buffer_size = <number> + write_buffer_size = <number> [logging] console_log_level= <string> file_log_level= <string> @@ -106,6 +110,8 @@ Details about the other fields and how this is implemented can be found [here](h - `websocket_endpoint` is the name of the endpoint that is used to establish a websocket connection. - `max_websocket_connections` is the maximum number of websocket connections that is allowed at the same time. +- `read_buffer_size` is the size of the read buffer for each socket in bytes. +- `read_buffer_size` is the size of the write buffer for each socket in bytes. ##### logging @@ -140,8 +146,10 @@ json_rpc_endpoint="/rpc" [web_socket] websocket_endpoint="/socketrpc" max_websocket_sessions=50 +read_buffer_size = 2048 +write_buffer_size = 2048 [logging] -console_log_level="debug" +console_log_level="info" file_log_level="warn" log_file="" ``` diff --git a/erisdb/erisdbss/server_manager.go b/erisdb/erisdbss/server_manager.go index f6f95862..6ca1c372 100644 --- a/erisdb/erisdbss/server_manager.go +++ b/erisdb/erisdbss/server_manager.go @@ -76,7 +76,12 @@ func (this *CmdProcess) Start(doneChan chan<- error) { } func (this *CmdProcess) Kill() error { - return this.cmd.Process.Kill() + err := this.cmd.Process.Kill() + if err != nil { + return err + } + _ , err2 := this.cmd.Process.Wait() + return err2 } // A serve task. This wraps a running process. It was designed to run 'erisdb' processes. diff --git a/server/config.go b/server/config.go index d50d7dd9..919d636c 100644 --- a/server/config.go +++ b/server/config.go @@ -45,6 +45,8 @@ type ( WebSocket struct { WebSocketEndpoint string `toml:"websocket_endpoint"` MaxWebSocketSessions uint `toml:"max_websocket_sessions"` + ReadBufferSize uint `toml:"read_buffer_size"` + WriteBufferSize uint `toml:"write_buffer_size"` } Logging struct { @@ -59,7 +61,7 @@ func DefaultServerConfig() *ServerConfig { kp := "" return &ServerConfig{ Bind: Bind{ - Address: "", + Address: "localhost", Port: 1337, }, TLS: TLS{TLS: false, @@ -71,6 +73,8 @@ func DefaultServerConfig() *ServerConfig { WebSocket: WebSocket{ WebSocketEndpoint: "/socketrpc", MaxWebSocketSessions: 50, + ReadBufferSize: 2048, + WriteBufferSize: 2048, }, Logging: Logging{ ConsoleLogLevel: "info", diff --git a/server/server.go b/server/server.go index e3e334c6..2d90023f 100644 --- a/server/server.go +++ b/server/server.go @@ -69,7 +69,6 @@ func (this *ServeProcess) Start() error { } listenAddress := address + ":" + fmt.Sprintf("%d", port) - srv := &graceful.Server{ Server: &http.Server{ Handler: router, diff --git a/server/websocket.go b/server/websocket.go index 3925a549..08ac2ddf 100644 --- a/server/websocket.go +++ b/server/websocket.go @@ -66,12 +66,11 @@ func (this *WebSocketServer) Start(config *ServerConfig, router *gin.Engine) { this.config = config this.upgrader = websocket.Upgrader{ - ReadBufferSize: 1024, + ReadBufferSize: int(config.WebSocket.ReadBufferSize), // TODO Will this be enough for massive "get blockchain" requests? - WriteBufferSize: 1024, + WriteBufferSize: int(config.WebSocket.WriteBufferSize), } this.upgrader.CheckOrigin = func(r *http.Request) bool { return true } - router.GET(config.WebSocket.WebSocketEndpoint, this.handleFunc) this.running = true } diff --git a/test/server/ws_burst_test.go b/test/server/ws_burst_test.go index 70917298..a5104c3b 100644 --- a/test/server/ws_burst_test.go +++ b/test/server/ws_burst_test.go @@ -104,6 +104,6 @@ func wsClient(doneChan chan bool, errChan chan error) { } client.Close() - time.Sleep(time.Millisecond * 500) + time.Sleep(time.Millisecond * 100) doneChan <- true } diff --git a/test/web_api/shared.go b/test/web_api/shared.go index d2571aa3..4f08a3c4 100644 --- a/test/web_api/shared.go +++ b/test/web_api/shared.go @@ -12,7 +12,7 @@ const SERVER_DURATION = 10 func init() { runtime.GOMAXPROCS(runtime.NumCPU()) log15.Root().SetHandler(log15.LvlFilterHandler( - log15.LvlDebug, + log15.LvlInfo, log15.StreamHandler(os.Stdout, log15.TerminalFormat()), )) gin.SetMode(gin.ReleaseMode) -- GitLab