
Browserver: a node.js HTTP server, in your browser - jedschmidt
http://browserver.org
======
arturadib
TL;DR: This is a proxy server that routes HTTP requests from a unique
subdomain (e.g. <http://m7rp3u2ntr9t3xr.browserver.org>) to a browser that's
visiting browserver.org. The JavaScript in the browser then handles the HTTP
response. This is possible thanks to a persistent connection between the
browser and browserver.org, via some "websocket-like" protocol.

The title "node.js HTTP server, in your browser" is because the HTTP handler
in the client (browser) has a Node-like API, see:

<https://github.com/jed/browserver-client#example>

~~~
jedschmidt
Thank you for explaining this much better than I did!

~~~
fichtl80
i get a gateway error

------
jedschmidt
Hey all,

I put browserver together in my free time over the last week. It's still a bit
of a toy, but I think it's useful to explore ideas around extending webhooks
all the way to the browser, to simplify our increasingly complicated web
architectures.

It's already late here in Tokyo, but I'll be up for a bit if anyone wants to
chat/brainstorm about approaches like this (and also to make sure the server
stays up).

~~~
javajosh
I had this idea, too, the killer application is actually demos and talks, I
think. The speaker sets up their browser server, asks the audience to hit a
URL, and then demonstrates in real time aspects of the system.

It's also a very neat way to bring WebKit Inspector to bear on server style
code. Glad you did it! I presume that you have a wildcard subdomain at the DNS
level and then some Node parsing magic to correctly proxy. Why subdomains
though? Why not just a tag like browserver.com/29adfija02 ?

~~~
jedschmidt
I chose hosts over paths for disambiguation because I want the request passed
to the proxy to be as close as possible to that passed to the browser.

~~~
BrendanEich
Also you get same-origin protection, FWIW.

------
ericz
I find this title rather misleading. There is no node.js HTTP server in your
browser. Meaning, you cannot do anything that is part of Node.js in the
browser "server"

The browser is still running its original js engine with none of the Node
goodies. It merely receives proxied requests, does some stuff to it, then
sends it back to the proxy, which returns it to the client.

~~~
jedschmidt

        It merely receives proxied requests, does some stuff to it, then sends it back to the proxy, which returns it to the client.
    

You just described the majority of the web servers that we web developers deal
with. Sure, it's a proxy, but the fact that the machine responding is
connected via WebSocket and not a local network doesn't make it any less of a
server, in my opinion.

------
arunoda
Nice attempt. But your title is misleading.

You just listen for a URL and forward it to the browser with socket.io
(Pusher, Pubnub are some commercial services for this)

If I can change some content in your webpage by just curling _localhost_ , I
can judge the title you put :)

~~~
e12e
So, it's not a new take on POW (plain old webserver):
[https://addons.mozilla.org/en-us/firefox/addon/pow-plain-
old...](https://addons.mozilla.org/en-us/firefox/addon/pow-plain-old-
webserver/) which apparently have been abandoned, and could use a fork (source
at: <http://davidkellogg.com/pow/> )?

Apparently there's a newer variation at:

    
    
      https://addons.mozilla.org/en-US/firefox/addon/browser-server/
    

and of course there's Opera's Unity.

I do get that the idea is that it "just" uses javascript (the server appears
to be down, so I'm actually guessing) -- but when such projects already exist,
I kind of expected more...

~~~
arunoda
I thing they use some kind of native addon (I don't know how FF addon works)
to do this.

Unfortunately Chrome's native client(NaCl) does not support TCP yet! So I
think something like this impossible in chrome? Any ideas?

~~~
simonster
POW is presumably written in JavaScript using Mozilla's asynchronous socket
APIs. I've written a similar HTTP server before.

Chrome has a JS socket API for extensions as well, but it doesn't currently
support TCP listening.

~~~
arunoda
Great. Thanks for the info.

------
aba_sababa
I don't really see why this is special. It's just a websocket connection that
happens to show every request made to the server. Your browser is not a
server, no matter which way you cut it.

~~~
andrewmunsell
Sure it is. Yes, the web socket connection is passing through requests to the
browser-server, but that browser-server _is_ the one responding.

------
state
I think there's a ton of unrealized potential in this kind of thinking.
Although people will say 'But that was done by X a year ago!' I see that as
evidence that this is gaining momentum.

Now, what's the project that will fully take advantage of this kind of thing?

~~~
shaunxcode
A lot of times it is about coming up with the right terminology and
positioning of an idea for it to "take off". This is a really nice approach in
that it utilizes concepts/a paradigm we are already comfortable with.

~~~
state
Yeah, agreed. Seems like one of the best things about this is that it
positions a (potentially) big idea in a way which makes it easily
understandable and fairly everyday.

~~~
tom_m
I mean yes, you never know what it will be used for. It may not be anything by
itself, but combined with a dozen other things it may be critical for
something clever. That's what I love about the internet - it's a massive
jigsaw puzzle.

------
mcantelon
Weinre is a project that, if my understanding of it is correct, leverages the
same basic idea. It's used to remotely debug mobile browser issues and also
uses Node.

<https://github.com/apache/incubator-cordova-weinre>

<http://www.youtube.com/watch?v=4nL6xey13fE>

------
VikingCoder
...I'm looking forward to WebRTC, which should make this obsolete, right?

<http://www.webrtc.org/>

That said, this is cool!

~~~
jmspring
Webrtc is about realtime communications. This is about exposing webhooks
clientside.

~~~
VikingCoder
It also allows direct client-to-client communications.

~~~
vitno
not yet arbitrary data. The protocol is also really hairy, I recommend using
<https://github.com/webRTC/webRTC.io>

------
quarterto
_It's not just you!<http://browserver.org> looks down from here._

~~~
quarterto
And back.

~~~
quarterto
Kind of. Servers are 502ing.

------
Kilimanjaro
Just add a text area and let people share some html. Now that would be cool!

Change some HTML in that text area and refresh automatically in all listeners.

That would be an interesting toy to play for a while.

------
sehrope
Anyone know if browserver.org is self hosting (i.e. running on some guys
desktop/laptop in a browser window)? Site is down at the moment and I'm
wondering if this is why.

~~~
jedschmidt
Ha, tinco beat you to that joke. The server is the smallest instance that
Joyent offers right now... hopefully it'll hang in there during the HN rush.

~~~
withjive
Would that happen to be one of the free <http://no.de> instances? Which if I
recall correctly come with 128mb ram on their custom solaris servers... I
always wondered what kind of load those small configurations using NodeJS
while handling something non-trivial could do.

Could you share some traffic/load numbers from getting HN'ed?

~~~
jedschmidt
Hard to tell right now... I started at Joyent's smallest node.js offering
(1GB) and then ramped it up to 8GB when the load hit. The server is crashing a
lot, but it's not very easy for me to debug right now.

Let me get back to you once the dust settles, deal?

~~~
withjive
Wow must of took a real hammering from being on the number spot. Goodluck!

------
mgurlitz
Github has a good readme if this site doesn't stay up:
<https://github.com/jed/browserver-node>

~~~
jedschmidt
Good point. I'll get to githubbing the browserver.org site itself now.

~~~
jedschmidt
Okay, it's here:

<https://github.com/jed/browserver.org>

------
alan_cx
Ok so I can access it either, but:

Loading the app... If this message doesn't go away within 10 seconds, it means
that the server crashed under heavy load. Please refresh mercilessly.

:)

------
mislav
Mind-bending.

------
rip_kirby
If you look at the favicon, there's two of them faviconception

------
sharps_xp
I do not understand what is going on.

------
debacle
And they're down.

It was a good 15 minutes, though.

~~~
tinco
I bet they closed their window >_>

------
shawndumas
෴

------
bestest
What sorcery is this!

------
napolux
We put a server in your browser. #inception

------
mekwall
Hacker News killed it with fire!

~~~
thefox
Yes, still down.

