Archive

Archive for the ‘C’ Category

Monkey HTTP Daemon v0.11.0 has been released

July 18th, 2010 Eduardo Silva No comments

Monkey HTTP Daemon is a very Fast and Lightweight Web Server for Linux. It has been designed to be very scalable with low memory and CPU consumption, the perfect solution for embedded and high production environments.

The project was started in 2001, internally it used to work with forking and threading networking models to attend clients, now, our current branch 0.11 is the second major milestone, we have a new web server working in asynchronous mode, fixed threads, stable API, indented configuration mode and with an excellent performance.

What is new ?

  • Indented Configuration mode
  • Cheetah! Plugin: New ‘config’ command
  • New MaxRequestSize configuration variable
  • Plugin API Interface improved: new functions available
  • Add RPM spec file (Welcome Fedora!)
  • Palm Server
  • Palm Plugin
  • Liana Plugin: Base networking plugin interface
  • Logger Plugin: the logger has been dropped from the core and moved to a plugin
  • Dirlisting Plugin: Allows to list the content of a directory in HTML format
  • Performance improvements
  • Minor fixes

Contributors

We would like to thanks to the following person who have been involved doing code and bug fixes contributions on this release:

Also thanks for take some time to help the project being sysadmin and maintaining our new server.

Join us!

We want to hear about you, our community is growing and you can be part of it!, you can met us in:

  • Mailing list: http://lists.monkey-project.com
  • IRC: irc.freenode.net #monkeyd
  • Categories: Announces, C, Monkey, Programming Tags:

    Monkey HTTP Daemon 0.11.0 coming soon!

    July 12th, 2010 Eduardo Silva No comments

    This week we will release Monkey HTTP Daemon v0.11.0,  stay tuned to our updates in :

    Categories: Announces, C, Monkey Tags:

    Monkey: Palm Protocol / Application Server

    May 24th, 2010 Eduardo Silva No comments

    In some previous post about Monkey HTTP Daemon project, i have been describing some parts of the new architecture and goals that we are trying to accomplish. Now we have a faster asynchronous web server, very lightweight and with a good designed API to extend the features through plugins.

    I have received some questions about dynamic content generation support, specifically questions like “what about CGI and PHP support ?”, so now is time to describe more in detail how we are handle this through our Palm Protocol.

    Palm Protocol, aims to provide a simple CGI applications server which work over TCP. Is pretty much similar to FastCGI or SimpleCGI, but still more simple :) , basically is a TCP server listening in different ports to serve different dynamic content in a pre-forked model. To explain it better take a look to the following diagram:

    Server Side

    Palm server create specific handlers per configuration, for example, it can be configured to serve PHP and Python scripts, each handler contains information about how many child process will be available, the executable interpreter and optional arguments for it, for example, in order to define a handler for PHP we could add this entry in palm.conf:

    [PHP]
    Port = 2010
    Exec = /usr/bin/php-cgi
    Arguments = -f
    Childs = 5

    That entry specify that the handler will be listening in TCP port 2010, it will create 5 child process and each request will be server by the php-cgi program, adding the -f argument before the script to be called.

    Each handler created is called a ‘Palm’, you can configure as many Palms as you want.

    Client Side

    In the client side, the Palm Plugin for Monkey HTTP Daemon will be listening for specific file extension on each HTTP request, so it can be configured to handle files with .php extension and connect to the right Palm. Here’s a simple configuration line for PHP in the client side, this configuration take place in the plugins/palm/palm.conf file:

    Palm   php   application/x-httpd-php    127.0.0.1     2010

    Each row in the configuration file represents a Palm entry, the fields required are: protocol, file extension, mime type, palm server address and palm server port. This configuration must match the Palm server configuration. So every time that a PHP file is requested, the Palm client will connect to the Palm server to the specific port, send the request and wait for a response.

    Protocol details

    The protocol as mentioned before, is very basic, is composed by the following:

    absolute_script_path + CRLF    (mandatory)
    cgi_header = value + CRLF      (optional)
    CRLFCRLF                                (mandatory)

    a text example could be:

    /home/foo/monkeyd/htdocs/info.php\r\n
    SERVER_SOFTWARE=Monkey/0.11.0-dev\r\n
    SERVER_PROTOCOL=HTTP/1.1\r\n
    HTTP_HOST=localhost\r\n
    QUERY_STRING=a=1&b=2&c=3\r\n
    \r\n\r\n

    The first mandatory row indicates the absolute script path to be interpreted or executed, the second optional row represent the CGI/1.1 headers used by the interpreters, you can add N cgi headers as required, and the final mandatory row indicates the end of the request.

    If any error occurred in the server side, the Palm server must return a formatted plain text or HTML error to the client side, Palm Protocol does not handle error codes.

    Categories: C, Monkey, Programming Tags:

    Announcement: Monkey HTTP Daemon 0.10.0 has been released

    April 5th, 2010 Eduardo Silva No comments

    Monkey Development team is proud to announce our major milestone: Monkey 0.10.0 !!!

    Introduction

    Monkey HTTP Daemon is a very Fast and Lightweight Web Server for Linux. It  has been designed to be very scalable with low memory and CPU consumption, the perfect solution for embedded and high production environments.

    The project was started in 2001, internally it used to work with forking and threading networking models to attend clients, now, our current release 0.10.0 is one of our major milestone, we have a new web server working in asyncronous mode, fixed threads and with an excellent performance.

    This version has been in development for the last two years, we have rewritten almost 85% of the old code and we have met our goals in a very
    stable product :)

    What’s new ?

    • Asynchronous Server: No more blocking calls.
    • New Pipelining request support
    • New ‘Listen’ configuration directive: allow to restrict incoming
      connection to a determinated network interface
    • QA Packages: We have added a quallity assurance package which help us to
      determinate if the server is working properly as expected, it has different
      type of request and expect specific responses, also it checks the log files
      for every QA request made
    • Plugins Support: Now Monkey support Plugins, we have created a new API
      which provides a very easy way to extend the behavior and features of the
      server.
    • Cheetah! Shell Plugin: This plugin add a command line interface (shell) to
      Monkey!, it has been writen for debugging purposes, check workers status and
      others.
    • Security Plugin : It adds optional security rules to restrict the access
      to the server
    • Worker logger: A new worker is in charge to register the log entries, it
      helps to reduce the I/O
    • Configuration Files: The configuration structure has changed, now we have
      a more organized configuration for global variables and virtual hosts
      directives.
    • A lot of minor bug fixes

    Contributors

    We would like recognize the contribution and help provided by the following
    volunteers:

    • Carlos Ghan
    • Thorsten Schmale
    • Niedobryjasiu
    • Jonathan Gonzalez
    • GreenFox
    • Felipe Astroza

    Join us!

    We want to hear about you, our community is growing and you can be part of
    it!, you can met us in:

    Official Announcement: http://www.monkey-project.com/Announcements/v0.10.0

    Categories: Announces, C, Monkey, Programming Tags:

    Introducing to Cheetah Shell

    March 24th, 2010 Eduardo Silva No comments

    I would like to introduce a new plugin in Monkey 0.10.0 called Cheetah! . Cheetah is a shell for Monkey HTTP Daemon, it runs on demand if the plugin is specified in the plugins.load configuration file, please take a look to this simple screenshot:

    So let’s see what it is and the current status:

    • Aims to work like a plugin for Monkey HTTP Daemon loaded on demand
    • Provides useful information about the configuration used for the server and virtual hosts defined
    • Provides details about the workers running. At the moment just the OS PID assigned
    • List plugins loaded and stages where each one is working or taking some action
    • Show server uptime

    Planned features for Monkey 0.11.0

    • Show memory usage per worker thread
    • Show basic statistics about current clients connected
    • Reconfigure Monkey on fly, no more server restart when configuration files are modified
    • Unload/Load plugins on fly
    • Print reports for debugging purposes
    • Work over unix pipe instead of Monkey STDIN
    Categories: Announces, C, Monkey, Programming Tags:

    How many task are involved when creating an open source project ?

    March 23rd, 2010 Eduardo Silva No comments

    Today i’ve been summarizing  how many different task are involved when you start an open source project, let’s see:

    1. Choose project name: for some people this task can take days!
    2. Choose project website URL: nowadays is difficult to find a short and cool domain name available
    3. Get a hosting, maybe sourceforge.net ? well, the right place to start :)
    4. Design your project logo and web site: you can install a CMS, but you need to spent time configuring and deciding contents that will be available
    5. Create a control version system repository: oh! svn or git ?, if so, where ? hmm
    6. Create a mailing list: you want to keep informed “someone” in the future!
    7. Create documentation: you know everything about your program, but what about others ?, not all end users are developers!
    8. Create a chat room: maybe the most easy step, don’t forget to set the topic if is an IRC channel and “save” the channel
    9. Register your project on a news site like freshmeat.net: the world must know about your project! not just your 2 friends!
    10. Invite people to participate: most of the successful projects are growing thanks to the community! you need people involved! (including fanboys!), if your project is interesting more than one will want to take part on it…
    11. Coding :)

    Are you sure that you will handle the whole stuff by your own ?, an open project is not just the license attached, is about to let people collaborate and hear their ideas, they can contribute a lot…

    Categories: C, Misc, Programming, Talks Tags:

    Monkey HTTP Daemon 0.10.0 RC5 is OUT!!!

    March 22nd, 2010 Eduardo Silva No comments

    Monkey HTTP DaemonWe have just released our fifth candidate for Monkey 0.10.0 !!

    Changes from previous versions:

    • This version includes a new function to retreive the OS somaxconn value
    • Fix a return value for forbidden status connections
    • Enable logs for connection status 301 302 and 304
    • Fix log body length for partial content connections
    • Fix log for HEAD method connections
    • Checklog: this is a new tool for the QA package. This tool check logfiles entries for specified rules, now for every QA .htt test file exists a logfile rule.
    Categories: C, Monkey, Programming Tags:

    Monkey HTTP Daemon 0.10.0 RC4 is OUT!!!

    March 18th, 2010 Eduardo Silva No comments

    The Monkey Team is proud to announce the availability of Monkey HTTP Daemon   0.10.0 Release Candidate 4 !!!

    What’s new ?

    This version includes fixes in the headers TOC parser, better handling of
    Connection header, fix a Pipelining check, six new QA scripts, new
    MONKEY_TRACE environment var support for trace mode, old comments cleanup
    and updated README and ChangeLogs

    Please check the web site for details

    http://www.monkey-project.com

    Categories: C, Monkey Tags:

    Monkey 0.10.0-rc2 is OUT !!!

    March 11th, 2010 Eduardo Silva No comments

    The Monkey Team is proud to announce the availability of Monkey HTTP Daemon 0.10.0-rc2 !!!

    What’s new ?

    Here we have the most significant changes made in RC2:

    - Monkey RC2 runs 8%-10% faster than RC1 !!!
    - Fixed bug in backward transversal directory Check
    - Fixed non-freed buffer for client IP
    - Minor fixes

    Thanks to Carlos Ghan and Jonathan Gonzalez for their contribution in this release !!

    More details in http://www.monkey-project.com

    Categories: C, Monkey Tags:

    Monkey 0.10.0 RC1 is OUT !!!

    March 2nd, 2010 Eduardo Silva No comments

    Today begins a very excited moment in Monkey HTTP Daemon project, the
    development team has decided to release Monkey 0.10.0 Release Candidate 1,
    so please check the following details:

    What’s a RC version ?

    A release candidate version (aka rc), is a special version which focus in
    stability, we will go releasing different rc versions until we consider that
    is a strong version free of visible bugs.

    How can i help ?

    First download Monket 0.10.0-rc1 and run hard tests over it, serving
    different type of files (small and big ones), run benchmark test with httest
    or apache benchmark, check compatibility issues on your local machine, etc.

    Quick Start

    You can download Monkey 0.10.0-rc1 from http://www.monkey-project.com or
    http://www.monkey-project.com/releases

    What’s next ?

    We need your feedback, if you find that something is not working properly,
    you got a crash or similar, let us know as soon as possible to this mailing
    list. Our bug tracker system is down so any email is appreciated,

    How to report a problem ?

    In order to provide full details about your issue, please provide
    reproducible steps, configuration files used, linux distribution used and
    your linux kernel version.

    We will provide a full announcement with details about core changes and
    people involved once 0.10.0 stable release is out, that’s all for now and
    let’s put our hands on!

    Categories: C, Monkey Tags: