Merge branch 'master' into v1
This commit is contained in:
@@ -59,7 +59,7 @@ feature -- Basic operations
|
||||
end
|
||||
```
|
||||
|
||||
When using the "standalone" connector (or the deprecated "nino" connector), by default the service listens on port 80, but often this port is already used by other applications, so it is recommended to use another port.
|
||||
When using the [standalone](../connectors/standalone.md) connector (or the deprecated "nino" connector), by default the service listens on port 80, but often this port is already used by other applications, so it is recommended to use another port.
|
||||
To define another port, redefine the feature `initialize` and set up a new port number using the service options (see below).
|
||||
|
||||
|
||||
@@ -86,6 +86,8 @@ feature {NONE} -- Initialization
|
||||
end
|
||||
```
|
||||
|
||||
Learn more about the [Standalone](../connectors/standalone.md) connector.
|
||||
|
||||
The **WSF_REQUEST** gives access to the incoming data; the class provides features to get information such as request method, form data, query parameters, uploaded files, HTTP request headers, and hostname of the client among others.
|
||||
|
||||
The **WSF_RESPONSE** provides features to define the response with information such as HTTP status codes (10x,20x, 30x, 40x, and 50x), response headers (Content-Type, Content-Length, etc.) and obviously the body of the message itself.
|
||||
|
||||
27
docs/workbook/connectors/standalone.md
Normal file
27
docs/workbook/connectors/standalone.md
Normal file
@@ -0,0 +1,27 @@
|
||||
Nav: [Workbook](../workbook.md)
|
||||
|
||||
## The EiffelWeb standalone connector
|
||||
|
||||
It provides a standalone httpd server for the EiffelWeb framework.
|
||||
It implements HTTP/1.1 with persistent connection, concurrent connection, ...
|
||||
|
||||
To easily set the standalone connector, see class `WSF_STANDALONE_SERVICE_OPTIONS`.
|
||||
|
||||
### Main settings:
|
||||
|
||||
* `port`: Listening port number (defaut: 80).
|
||||
* `max_concurrent_connections`: maximum of concurrent connections (default: 100)
|
||||
* `max_tcp_clients`: Listen on socket for at most `max_tcp_clients` connections (default: 100)
|
||||
* `socket_timeout`: Amount of seconds the server waits for receipts and transmissions during communications. With timeout of 0, socket can wait for ever. (default: 60)
|
||||
* `socket_recv_timeout`: Amount of seconds the server waits for receiving data during communications. With timeout of 0, socket can waits for ever. (default: 5)
|
||||
* `keep_alive_timeout`: Persistent connection timeout. Number of seconds the server waits after a request has been served before it closes the connection (default: 5)
|
||||
* `max_keep_alive_requests`: Maximum number of requests allowed per persistent connection. To disable KeepAlive, set `max_keep_alive_requests` to `0`. To have no limit, set `max_keep_alive_requests` to `-1` (default: 300).
|
||||
|
||||
* `is_secure`: check SSL certificate?
|
||||
* `secure_certificate`: path to SSL certificate.
|
||||
* `secure_certificate_key`: certificate key
|
||||
|
||||
* `verbose`: display verbose output (Default: false)
|
||||
|
||||
See also `WGI_STANDALONE_CONSTANTS` for default values.
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
<target name="websocket_app">
|
||||
<root class="APPLICATION" feature="make_and_launch"/>
|
||||
<file_rule>
|
||||
<exclude>/\.svn$</exclude>
|
||||
<exclude>/CVS$</exclude>
|
||||
<exclude>/EIFGENs$</exclude>
|
||||
<exclude>/\.svn$</exclude>
|
||||
</file_rule>
|
||||
<option warning="true">
|
||||
<assertions precondition="true" postcondition="true" check="true" invariant="true" loop="true" supplier_precondition="true"/>
|
||||
@@ -17,6 +17,14 @@
|
||||
<library name="wsf" location="..\..\library\server\wsf\wsf.ecf"/>
|
||||
<cluster name="app" location=".\" recursive="true"/>
|
||||
</target>
|
||||
<target name="websocket_app_st" extends="websocket_app">
|
||||
<description>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.
|
||||
</description>
|
||||
<capability>
|
||||
<concurrency use="none"/>
|
||||
</capability>
|
||||
</target>
|
||||
<target name="websocket_app_ssl" extends="websocket_app">
|
||||
<variable name="ssl_enabled" value="true"/>
|
||||
</target>
|
||||
|
||||
@@ -1,13 +1,20 @@
|
||||
verbose=true
|
||||
verbose_level=INFORMATION
|
||||
port=9090
|
||||
|
||||
#Socket and timeout
|
||||
max_concurrent_connections=100
|
||||
keep_alive_timeout=35
|
||||
max_tcp_clients=100
|
||||
socket_timeout=30
|
||||
socket_recv_timeout=5
|
||||
max_keep_alive_requests=300
|
||||
|
||||
#Persistent connections
|
||||
keep_alive_timeout=2
|
||||
max_keep_alive_requests=-1
|
||||
|
||||
#SSL
|
||||
is_secure=false
|
||||
secure_certificate=ca.crt
|
||||
secure_certificate_key=ca.key
|
||||
|
||||
#Debug
|
||||
verbose=true
|
||||
verbose_level=INFORMATION
|
||||
|
||||
@@ -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
|
||||
-- <Precursor>
|
||||
-- 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
|
||||
|
||||
@@ -25,8 +25,8 @@ feature -- Default timeout settings
|
||||
|
||||
feature -- Default persistent connection settings
|
||||
|
||||
default_keep_alive_timeout: INTEGER = 15 -- seconds
|
||||
default_max_keep_alive_requests: INTEGER = 100
|
||||
default_keep_alive_timeout: INTEGER = 5 -- seconds
|
||||
default_max_keep_alive_requests: INTEGER = 300
|
||||
|
||||
note
|
||||
copyright: "2011-2016, Jocelyn Fiat, Javier Velilla, Eiffel Software and others"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -66,7 +66,7 @@ feature -- Access: connection
|
||||
end
|
||||
|
||||
max_tcp_clients: INTEGER assign set_max_tcp_clients
|
||||
-- Listen on socket for at most `queue' connections.
|
||||
-- Listen on socket for at most `max_tcp_clients' connections.
|
||||
do
|
||||
Result := option_integer_value ("max_tcp_clients", 0)
|
||||
end
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user