diff --git a/examples/websocket/websocket_app.ecf b/examples/websocket/websocket_app.ecf index d14ca0d8..6126f6cb 100644 --- a/examples/websocket/websocket_app.ecf +++ b/examples/websocket/websocket_app.ecf @@ -3,9 +3,9 @@ - /\.svn$ /CVS$ /EIFGENs$ + /\.svn$ + + Single thread solution. + Warning: as it can not handle concurrent request, it is recommended to set Keep-Alive-Timeout to very low value, as browser will keep persistent connection open too long. + + + + + diff --git a/examples/websocket/ws.ini b/examples/websocket/ws.ini index 29179920..af39b45d 100644 --- a/examples/websocket/ws.ini +++ b/examples/websocket/ws.ini @@ -2,11 +2,11 @@ verbose=true verbose_level=INFORMATION port=9090 max_concurrent_connections=100 -keep_alive_timeout=35 +keep_alive_timeout=2 +max_keep_alive_requests=-1 max_tcp_clients=100 socket_timeout=30 socket_recv_timeout=5 -max_keep_alive_requests=300 is_secure=false secure_certificate=ca.crt diff --git a/library/server/httpd/concurrency/none/httpd_request_handler.e b/library/server/httpd/concurrency/none/httpd_request_handler.e index c033de78..808fb033 100644 --- a/library/server/httpd/concurrency/none/httpd_request_handler.e +++ b/library/server/httpd/concurrency/none/httpd_request_handler.e @@ -8,19 +8,9 @@ deferred class inherit HTTPD_REQUEST_HANDLER_I - redefine - is_persistent_connection_supported - end - -feature -- Status report - - is_persistent_connection_supported: BOOLEAN = False - -- - -- When there is no concurrency support, do not try to support - -- persistent connection! note - copyright: "2011-2015, Jocelyn Fiat, Javier Velilla, Eiffel Software and others" + copyright: "2011-2017, Jocelyn Fiat, Javier Velilla, Eiffel Software and others" license: "Eiffel Forum License v2 (see http://www.eiffel.com/licensing/forum.txt)" source: "[ Eiffel Software diff --git a/library/server/httpd/configuration/httpd_constants.e b/library/server/httpd/configuration/httpd_constants.e index 80fbef03..2475a0b1 100644 --- a/library/server/httpd/configuration/httpd_constants.e +++ b/library/server/httpd/configuration/httpd_constants.e @@ -25,7 +25,7 @@ feature -- Default timeout settings feature -- Default persistent connection settings - default_keep_alive_timeout: INTEGER = 15 -- seconds + default_keep_alive_timeout: INTEGER = 5 -- seconds default_max_keep_alive_requests: INTEGER = 100 note diff --git a/library/server/httpd/httpd_request_handler_i.e b/library/server/httpd/httpd_request_handler_i.e index d2598206..c61a1759 100644 --- a/library/server/httpd/httpd_request_handler_i.e +++ b/library/server/httpd/httpd_request_handler_i.e @@ -140,7 +140,8 @@ feature -- Settings is_persistent_connection_supported: BOOLEAN -- Is persistent connection supported? do - Result := {HTTPD_SERVER}.is_persistent_connection_supported and then max_keep_alive_requests > 0 + Result := {HTTPD_SERVER}.is_persistent_connection_supported and then + max_keep_alive_requests /= 0 --| `-1` no limit end is_next_persistent_connection_supported: BOOLEAN @@ -247,7 +248,8 @@ feature -- Execution l_exit loop n := n + 1 - if n >= m then + -- If `m` is `-1`, no limit for the number of keep_alive requests. + if m >= 0 and n >= m then is_next_persistent_connection_supported := False elseif n > 1 and is_verbose then log ("Reuse connection (" + n.out + ")", information_level) diff --git a/library/server/wsf/connector/standalone/wsf_standalone_service_options.e b/library/server/wsf/connector/standalone/wsf_standalone_service_options.e index b537ecf2..6cf35895 100644 --- a/library/server/wsf/connector/standalone/wsf_standalone_service_options.e +++ b/library/server/wsf/connector/standalone/wsf_standalone_service_options.e @@ -104,11 +104,26 @@ feature -- Access: persistent connection -- Maximum number of requests allowed per persistent connection. -- Recommended a high setting. -- To disable KeepAlive, set `max_keep_alive_requests' to 0. + -- To have no limit, set `max_keep_alive_requests' to -1. -- By default: {HTTPD_CONFIGURATION_I}.default_max_keep_alive_requests . do Result := option_integer_value ("max_keep_alive_requests", 0) end + persistent_connection_disabled: BOOLEAN + -- Persistent connection disabled? + -- (or Keep-Alive disabled). + do + Result := max_keep_alive_requests = 0 + end + + has_unlimited_keep_alive_requests: BOOLEAN + -- Has unlimited count of keep alive requests. + -- i.e no limit of number of requests allowed per persistent connection. + do + Result := max_keep_alive_requests < 0 + end + feature -- Access: SSL is_secure: BOOLEAN assign set_is_secure @@ -205,6 +220,16 @@ feature -- Element change set_numeric_option ("max_keep_alive_requests", nb) end + set_unlimited_keep_alive_requests + do + set_max_keep_alive_requests (-1) + end + + disable_persistent_connection + do + set_max_keep_alive_requests (0) + end + set_is_secure (b: BOOLEAN) -- Set secured connection enabled to `b'. -- i.e if connection is using SSL/TLS.