WEBrick listening on multiple ports?

  • Follow


I'm writing an application that requires a specialized HTTP server.
This server needs to listen on a range of ports, for example, ports
10000 through 10100.  Whenever someone makes an HTTP connection to the
host on any of these ports, a WEBrick servlet will respond.  The same
servlet should respond to each connection.

I know that I can do this using the "hammer and tongs" method of
starting up a large number of identical WEBrick applications, each
configured to listen on a different port.  But I'd like to do this
within a single program instance, if at all possible.

It's trivial to do this with a single port, but is there a way to use
WEBrick to listen on a range of ports in this manner?  If so, could
someone point me to an example or some docs?

Although I prefer WEBrick, if there's an easy way to do manage a range
of HTTP connections like this using some other ruby utility, I'll settle
for that.

Thanks in advance.

-- 
 Lloyd Zusman
 ljz@asfast.com
 God bless you.



0
Reply ljz (199) 11/7/2004 12:26:48 AM

On Sun, Nov 07, 2004 at 09:26:48AM +0900, Lloyd Zusman scribed:
> It's trivial to do this with a single port, but is there a way to use
> WEBrick to listen on a range of ports in this manner?  If so, could
> someone point me to an example or some docs?

   brick = HTTPServer.new(...)

   myports.each { |p| brick.listen(address, p) }

Works like a charm.

  -Dave

-- 
work: dga@lcs.mit.edu                          me:  dga@pobox.com
      MIT Laboratory for Computer Science           http://www.angio.net/


0
Reply dga (46) 11/7/2004 12:36:31 AM


P.S. -- In my request below, I'm hoping to be able to do this without
        forking off a bunch of threads, one for each HTTPServer instance
        associated with a different port.  I thought that I might be
        able to have a single HTTPServer instance and use the #listen
        method inherited from GenericServer, but I can't seem to get
        that to work.  Thanks again in advance.


Lloyd Zusman <ljz@asfast.com> writes:

> I'm writing an application that requires a specialized HTTP server.
> This server needs to listen on a range of ports, for example, ports
> 10000 through 10100.  Whenever someone makes an HTTP connection to the
> host on any of these ports, a WEBrick servlet will respond.  The same
> servlet should respond to each connection.
>
> I know that I can do this using the "hammer and tongs" method of
> starting up a large number of identical WEBrick applications, each
> configured to listen on a different port.  But I'd like to do this
> within a single program instance, if at all possible.
>
> It's trivial to do this with a single port, but is there a way to use
> WEBrick to listen on a range of ports in this manner?  If so, could
> someone point me to an example or some docs?
>
> Although I prefer WEBrick, if there's an easy way to do manage a range
> of HTTP connections like this using some other ruby utility, I'll settle
> for that.
>
> Thanks in advance.
>
> -- 
>  Lloyd Zusman
>  ljz@asfast.com
>  God bless you.
>
>
>

-- 
 Lloyd Zusman
 ljz@asfast.com
 God bless you.



0
Reply ljz (199) 11/7/2004 12:41:47 AM

"David G. Andersen" <dga@lcs.mit.edu> writes:

> On Sun, Nov 07, 2004 at 09:26:48AM +0900, Lloyd Zusman scribed:
>> It's trivial to do this with a single port, but is there a way to use
>> WEBrick to listen on a range of ports in this manner?  If so, could
>> someone point me to an example or some docs?
>
>    brick = HTTPServer.new(...)
>
>    myports.each { |p| brick.listen(address, p) }
>
> Works like a charm.

I had tried that, but I must have used an invalid 'address' or something
... 'cause now it works.

Thanks!

-- 
 Lloyd Zusman
 ljz@asfast.com
 God bless you.



0
Reply ljz (199) 11/7/2004 12:51:47 AM

Lloyd Zusman <ljz@asfast.com> writes:

> P.S. -- In my request below, I'm hoping to be able to do this without
>         forking off a bunch of threads, one for each HTTPServer instance
>         associated with a different port.  I thought that I might be
>         able to have a single HTTPServer instance and use the #listen
>         method inherited from GenericServer, but I can't seem to get
>         that to work.  Thanks again in advance.

Depending on the operating system that you deploy on, you can also do this
with simple port mapping in the firewall. On linux I use this to map port
localhost:8080 to external-address:80.

 S.
0
Reply stefan.arentz (138) 11/7/2004 8:35:14 AM

4 Replies
24 Views

(page loaded in 0.123 seconds)


Reply: