I know there are ways to fake it, polling (or long polling) but is there any way to have the server contact the browser to push out information?
Either polling optio
I would think WebSockets (see http://en.m.wikipedia.org/wiki/WebSocket) is real push, so the answer would be: it depends upon the browser. If you need wide compatibility, the best you can do today is JavaScript libraries that will choose the best available protocol for the browser it's running in (e.g. https://github.com/ffdead/jquery-graceful-websocket). But you wanted server-friendly, and supporting multiple protocols is not server friendly. The current state-of-the-art is that doing cool stuff that works across browsers is engineering-intensive.
Um, no.
Your browser doesn't listen for incoming connections.
Nor would you want it to be able to. We have enough exploits as it is.
May be technology has advanced from the time the question was asked ... I came across this one searching for something else.
WebPush is available in most of the browsers and there are several Push Notification providers that send information from the server to the browser. Other than few browsers like Safari, one can develop handlers which can be invoked when the notification arrives and perform some action on the client side browser.
As others stated it is impossible for server to contact client without client request (on regular HTTP).
But if you looking for clean solution for push notificatinons, then look at Server-Sent Events. It is regular HTTP and works seamless with most of the browsers which support HTTP 1.1.
SSE works only in a single direction (server -> client), which is the main mechanic for push notifications. For client-> server communication you can always use Ajax. I made a summarize of this in Which technology for realtime communication for a web app?
If you're using RIA technology like Adobe Flex, I believe the Flex version of a "server push" (AMF messaging) would meet your definition of a server push.
Of course you can also do the primitive ajax-y (hacky) polling method too, but there's no reason unless you're forced to.
I know there are ways to fake it, polling (or long polling) but is there any way to have the server contact the browser to push out information?
The connection must be first established by the client to the server. There's no way of a server contacting a web client.
Either polling option wastes resources on the server and depending on the server can lock it up (apache and iis for example).
That's correct. Frequent polling is inefficient which is one of the reasons we are moving to a push world with persistent connections. WebSockets will be the best solution for this. I work for Pusher, a hosted realtime WebSocket solution, and we've seen a massive uptake in this technology driven by a community that believe it's the best solution to the resource and realtime communication problem.
Seems like a lot of sites are using long polling to fake a server-side push mechanism over http. Wouldn't it just be better to have a true push protocol built into a browser?
Yes, that's why we now have WebSockets. HTTP solutions to web browsers are ultimately a hack and don't work consistently (in the same way) between browsers.
What options are there that are server friendly to push (fake or otherwise) information to web browsers?
Related information and resources: