aboutsummaryrefslogtreecommitdiffstats
AgeCommit message (Collapse)Author
2013-03-31Use a custom supervisor for ranch_conns_supLoïc Hoguin
This change was designed so that we don't have this supervisor and ranch_listener performing the same job, namely monitoring connection processes, the first through links and the second through monitors. This change also makes possible various optimizations: * Acceptors don't need to know about options, maximum number of connections, or anything else. They can just accept, pass the socket to the supervisor, and when the supervisor replies continue accepting connections. * The supervisor holds most of the information that will be passed to created processes. This reduces copying. * The supervisor temporarily takes ownership of the socket, then creates the connection process and gives it ownership, streamlining the creation. * The supervisor can hold acceptors in their receive loop if max_connections is reached. When this number gets below the limit it can then send a message to a sleeping acceptor to make it resume its operations. * Because we know that all connection process creations are made from the local Erlang node, we can greatly reduce the number operations to be made when calling the supervisor. * Because all acceptors die if this supervisor dies, we can remove even more operations from the calling code. We do not need to monitor or wait for a timeout. This reduces the call code to two statements: send and receive. (Thanks James Fish for helping with that.) * The supervisor only needs to keep track of a list of pids. There is no children specification to be maintained, we do not need to handle restart strategy (no process can be restarted because the socket dies with it). We are using the process dictionary for storing the pids as it proved to be the simplest and fastest solution. * The supervisor maintains a count of current connections, but also of processes (including the ones that removed themselves from the pool), making any query of these values very fast. The supervisor should still be compatible with OTP principles. It responds to calls from the supervisor module as expected, although some of them are disabled and an error will be returned, for example supervisor:start_child/2. It is also started with proc_lib and handles system messages. sys:get_status/1 can thus be used as expected. We can see a great increase in the number of requests/s, a great improvement in the latency of requests, and we can simply accept requests faster than before. It will probably have a bigger increase under virtualized environments, although that's only a guess. As a result of this, we don't write much anymore in the ranch_server ets table, so the write_concurrency option was removed. Tests were also slightly improved to prevent race conditions.
2013-03-06Update Ranch to 0.6.20.6.2Loïc Hoguin
2013-03-06Add next_protocols_advertised option to ranch_sslLoïc Hoguin
For TLS Next Protocol Negotiation support.
2013-02-27Merge branch 'master' of git://github.com/0x00F6/ranchLoïc Hoguin
2013-02-18Support for fail_if_no_peer_cert SSL server option.0x00F6
2013-02-14Merge branch 'remove-pointless-sleep' of git://github.com/fishcakez/ranchLoïc Hoguin
2013-02-04Remove pointless sleep from tcp_upgrade testJames Fish
2013-01-29Makefile verbosity tweaksLoïc Hoguin
2013-01-29Makefile: only recompile files newer than the .appLoïc Hoguin
2013-01-17Update Ranch to 0.6.10.6.1Loïc Hoguin
2013-01-17Update AUTHORS fileLoïc Hoguin
2013-01-17Explain how to use Ranch with a gen_server in the guideLoïc Hoguin
2013-01-17Add section about platform-specific TCP features to the guideLoïc Hoguin
2013-01-17Do not require rebar to build RanchLoïc Hoguin
All is done in the Makefile, like with Cowboy.
2013-01-15Merge branch 'optimise-conn-count' of https://github.com/ferd/ranchLoïc Hoguin
2013-01-15Ignore tracking of requests when MaxConn = infinityFred Hebert
There is no need to contact the server and track requests unless being asked to do so by the user. It's going to be faster and more efficient to not track anything when being told tracking doesn't matter. Whenever the max connections is set to infinity, the connections counting key is not created, or is deleted if it existed already. When using a numeric value, the connection count is created or maintained if it existed already. Moreover, trying to reduce a listener's counter while the max connection number is set to `infinity` will return 0 and avoid all counting operations as they are meaningless.
2013-01-15Merge branch 'master' of https://github.com/ferd/ranchLoïc Hoguin
2013-01-15Allow raw socket options for TCP and SSLFred Hebert
This patch lets the user set and use raw socket options as described in inet:setopts/2 documentation. The raw options can be useful to use TCP features that are platform- specific and not supported in inet in general, such as TCP_DEFER_ACCEPT or TCP_LINGER2 in linux stacks, for example.
2012-12-24Update version to 0.6.00.6.0Loïc Hoguin
2012-12-24Add #ninenines IRC channel + support options to the READMELoïc Hoguin
2012-12-24Update AUTHORSLoïc Hoguin
2012-12-24Update ROADMAPLoïc Hoguin
2012-12-24Improve max_connections typeLoïc Hoguin
It is non_neg_integer() | infinity. Introduce the type `ranch:max_conns/0` for easier manipulation.
2012-12-24Add ranch:set_max_connections/2 and get_max_connections/1Loïc Hoguin
2012-12-21Merge branch 'fix/listener_sup_failures' of git://github.com/keynslug/syncranchLoïc Hoguin
2012-12-21Assure we manually close right socket in testcasesAndrew Majorov
Concerning supervisor tests subtle issue. Before we just presumed that last port in the global list of ports is the listening socket. From now we trace the return value of the `ranch_tcp:listen` call.
2012-12-21Ensure transport module is loaded before checking exportsAndrew Majorov
Tests were constantly failing without this patch. It seems ct starts erlang code server in interactive mode, so application module loading is defered.
2012-12-21Test cases for the listener supervisor behaviorAndrew Majorov
2012-12-21Fix for cases when listener dies before acceptorsAndrew Majorov
2012-12-21Make listener supervisor failures less painfulAndrew Majorov
Two general issues were addressed. The first one is the issue with statically defined pids passed into childspecs. This issue prevents regular supervisor' children restarts in the case of someone's failure. The second one is the not quite appropriate restart strategy. Changed to rest_for_one which in pair with previous fixes assures that live connections will not die in the case of partial failure. Among possible failures are listening socket shutdown or frequent accept errors.
2012-12-20Merge branch 'adt-socket-transport-opt' of git://github.com/basho/ranchLoïc Hoguin
2012-12-20Add {socket, Socket} transport option, for accepting on existing socketsAndrew Thompson
2012-12-20Return {error, badarg} if start_listener got a bad transport moduleLoïc Hoguin
2012-12-13Improve guide on listening on privileged portsLoïc Hoguin
Making people happy one IRC channel at a time.
2012-12-01Add Transport:sendfile/2 supportLoïc Hoguin
Uses file:sendfile/2 for TCP, a fallback function for SSL.
2012-12-01Fix typespecs for Transport:send/2Loïc Hoguin
2012-11-22Small clarification on the last ssl_auth snippetLoïc Hoguin
2012-11-22Add "SSL client authentication" chapter to the guideLoïc Hoguin
2012-11-20Error out if Ranch can't be started in the test suiteLoïc Hoguin
2012-11-13Better markdown in the READMELoïc Hoguin
2012-11-12Add two values to Ranch application for private useLoïc Hoguin
2012-11-12Fix Markdown in the guideLoïc Hoguin
2012-11-12Allow IP tuples and more when connecting transportsLoïc Hoguin
2012-10-24Allow passing the 'verify' option in ranch_sslLoïc Hoguin
2012-10-24Small README fixesLoïc Hoguin
2012-09-26Add the {nodelay, boolean()} option controlling TCP_NODELAYLoïc Hoguin
Enabled by default. A comprehensive explanation about TCP_NODELAY and the Nagle algorithm can be found at http://www.stuartcheshire.org/papers/NagleDelayedAck/
2012-08-22Update version to 0.4.00.4.0Loïc Hoguin
2012-08-22Add initial Ranch guideLoïc Hoguin
2012-08-20Add the 'ranch_protocol' behaviourLoïc Hoguin
2012-08-20Add the 'ranch_transport' behaviourLoïc Hoguin
At the same time we make the 'port' option optional, defaulting to 0.