/dukserver

A simple HTTP-Server base on Duktape

Primary LanguageCMIT LicenseMIT

dukserver

A simple HTTP-Server base on Duktape

I want to build a remote mantain web server for ARM-based linux. First I choose Python, but cross-compile is painful, and Python is very huge size.

So I decided to find some light script engine, such like lua. But I don't like LUA Syntax.

Finally I found Duktape in my codes collection. And pick it up, try again. So I base on luasocket and duktape, I implement a light http server.

But duktape is leak of buildin function. So I implement python like library. And extend String.encode(encoding) and String.decode(encodeing) base on libiconv. And override default Duktape.modSearch function.

  var fs = require('fs');
  var os = require('os');
  var path = require('os.path');
  var sys = require('sys');
  var time = requre('time');
  var _subprocess = require('_subprocess');
  
  //file access
  var f = fs.open('../../file.bin');
  var text = f.read();
  f.close();
  
  //reflaction method
  var m = dir(f);
  for (var k in m) {
      print(' ' + k + ': ' + m[k]);
  }
  
  print(" os.getcwd(): " + 
        os.getcwd());
    
  print(" os.path.split('C:'): " + 
        os.path.split('C:'));
  print(" os.path.split('C:/'): " + 
        os.path.split('C:/'));
  print(" os.path.split('/ewfwef/ffff.js'): " + 
        os.path.split('/ewfwef/ffff.js'));

  print(" os.path.splitext('/ewfwef/ffffjs'): " + 
        os.path.splitext('/ewfwef/ffffjs'));
  print(" os.path.splitext('c:\\ewfwef\\ffff.js'): " + 
        os.path.splitext('c:\\ewfwef\\ffff.js'));
  print(" os.path.splitext('c:/ewfwef/ffff.js'): " + 
        os.path.splitext('c:/ewfwef/ffff.js'));

  print(" os.path.normpath('test/../.././hello.js'): " + 
        os.path.normpath('test/../.././hello.js'));

  print(" os.path.abspath('test/../.././hello.js'): " + 
        os.path.abspath('test/../.././hello.js'));

  print(" os.path.join('C:/', 'test', 'file.js')" +
        os.path.join('C:/', 'test', 'file.js'));
        
  //string encode, decode
  var str_utf8 = 'hello world';
  var str_ucs2 = str_utf8.decode('UTF-8');
  var str_gbk  = str_utf8.encode('GBK');
  
  //subprocess
  var ps = _subprocess.psopen('ls', '-al');
  while (1) {
      var out = ps.stdout.read();
      if (out == null) {
        break;
      }
      print(out);
  }
  ps.wait();
  ps.close();

Duktape Server:

  • libhttpd/wsgi.txt: A example wsgi variable dump from mod_wsig+apache
  • libhttpd/wsgi_server.c: Embedded duktape to libhttpd, base on http_mpm
  • libhttpd/wsgi_server.h: Embedded duktape to libhttpd, base on http_mpm

Build Script:

  • build/Makefile.msvc: Build script for Visual Studio 2010
  • build/Makefile.mingw: Build script for MSYS mingw32
  • build/Makefile.linux: Build script for Linux

Duktape files [https://github.com/svaarala/duktape]:

  • duktape/duk_config.h
  • duktape/duktape.h
  • duktape/duktape.c

Duktape python like library:

  • duktape/subprocess.h: A python like popen.
  • duktape/subprocess_win32.h: for Windows platform
  • duktape/subprocess_linux.h: for Linux platform
  • duktape/dukpylib.h: A python like library
  • duktape/dukpylib.c: A python like library

LuaSocket [http://luaforge.net/projects/luasocket/]:

  • libsocket/libsocket.h
  • libsocket/usocket.c
  • libsocket/wsocket.c

Http/Httpd Library:

  • libhttpd/http_buffer.h: A dynamic buffer interface
  • libhttpd/http_client.c: Http Client interface
  • libhttpd/http_client.h: Http Client interface
  • libhttpd/http_common.h: Common define for this library
  • libhttpd/http_connection.h: Connection data struct
  • libhttpd/http_content.c: Common request, response data struct
  • libhttpd/http_content.h: Common request, response data struct
  • libhttpd/http_map.c: Simple map
  • libhttpd/http_map.h: Simple map
  • libhttpd/http_mpm.c: Multi-Thread MPM wrap server interface
  • libhttpd/http_mpm.h: Multi-Thread MPM wrap server interface
  • libhttpd/http_parse.c: Parser of headers
  • libhttpd/http_parse.h: Parser of headers
  • libhttpd/http_sendrecv.c: Request and Response interface
  • libhttpd/http_sendrecv.h: Request and Response interface
  • libhttpd/http_server.c: Http Server interface
  • libhttpd/http_server.h: Http Server interface
  • libhttpd/http_string.c: Some string function
  • libhttpd/http_string.h: Some string function
  • libhttpd/http_sys.h: Abs layer of platform
  • libhttpd/http_sys_linux.c: for Linux platform
  • libhttpd/http_sys_w32.c: for Windows platform
  • libhttpd/http_urldecode.c: decode url-encode-wwww
  • libhttpd/http_urldecode.h: decode url-encode-wwww
  • libhttpd/http_urlencode.c: encode url-encode-www
  • libhttpd/http_urlencode.h: encode url-encode-www
  • libhttpd/libhttp.c: user interface
  • libhttpd/libhttp.h: user interface