WEBrick listening on multiple ports?

L

Lloyd Zusman

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.
 
D

David G. Andersen

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
 
L

Lloyd Zusman

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.
 
L

Lloyd Zusman

David G. Andersen said:
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!
 
S

Stefan Arentz

Lloyd Zusman said:
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,045
Latest member
DRCM

Latest Threads

Top