开发者

Building a reverse proxy

开发者 https://www.devze.com 2023-03-15 05:40 出处:网络
I\'m building a reverse proxy from scratch. The requirements are: 1) Super scalable. It must handle a lot of concurrent requests (also streaming, 1000 request/second would be a good performance in my

I'm building a reverse proxy from scratch. The requirements are:

1) Super scalable. It must handle a lot of concurrent requests (also streaming, 1000 request/second would be a good performance in my case)

2) Super fast (non blocking).

3) No C/C++ or Erlang

4) Easy to mantain - even if it was, Assembly is not an option :)

After some research, most of people suggests using node.js or Scala - what do you think is the best solution for this kind of job? Which technologies wo开发者_开发技巧uld you use to build this kind of proxy?

Thanks


Personally I'd try out this guy first.

Just to expound a bit, people who said "try node.js or Scala" are slightly misguided in that Scala—like Java—is just a programming language, whereas node.js is most of a platform. Apart from its general advantages, the main things Scala brings to the table for this kind of project are:

  1. A juicy bit of syntax that makes it easier to write actor systems as libraries, namely PartialFunction "literals":

    trait NeedsAPF {
      def pf: PartialFunction[Any,Unit]
    }
    
    object PFHaver extends NeedsAPF {
      def pf = {
        case i: Int => println("I got an int and it was " + i)
      }
    }
    
  2. When you're ready for it, a continuations plugin, which lets you write code that looks synchronous, but can be asynchronous under the covers.


I'd take a look at: https://github.com/nodejitsu/node-http-proxy as it satisfies all of your requirements. I'm not sure why there's a need to build it from scratch, but I suppose if you decide to build it in node, you can certainly at least take inspiration from this.


Scala should be good enough, but you'll need to use NIO a lot, which means you'll probably be in close contact with Java's NIO library. I don't know if any of the libraries available in Scala will help you in this, but, then again, it's your job to look it up, not mine. :-)

0

精彩评论

暂无评论...
验证码 换一张
取 消