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.