How would you implement an online chat application?
Which technology would you use?
--------
We are building something similar and have the following requirements
- People on the web should be able to use it
- No download of an application
- Broadcasting messages to all user (server to clients)
- Everyone should be able to use it
- People behind firewalls, proxies, NATs, …
- People with 1 of the current browsers
- Lightweight solution needed
We tested and verified different technology options like:
- HTML+ Reverse AJAX
- Silverlight 2: Duplex WCF over HTTP (Long polling HTTP connection under the hood or Comet-style)
- Silverlight 4: Duplex WCF over TCP (is using net.tcp, socket connection under the hood)
- Silverlight raw Sockets (maybe even using SocketsLight)
- Silverlight UDP
- HTML 5 web sockets
The signs for HTML 5 web sockets are not so good, even though the promise for the socket implementation sounds interesting!
But it seems that HTML 5 is not going to be ready before ~201X, X > 2 and not sure what that X is…
More here
http://blogs.techrepublic.com.com/programming-and-development/?p=718
http://www.webmonkey.com/blog/HTML_5_Won_t_Be_Ready_Until_2022DOT_Yes__2022DOT
We finally are using "Silverlight with Duplex WCF over TCP”
And falling back to "Silverlight with Duplex WCF over HTTP” when we have a firewall or proxy in the middle that causes connection problems.
The main reason for going in that direction was:
- Ease of development and productivity in coding with Silverlight and WCF
- Developing against one API (WCF) and doing an easy fallback behind the scenes (10 lines of code!)
- Performance is awesome by using TCP (see Tomasz post about that)
- Testing Silverlight means testing 1 environment against testing different browsers, operating systems, JavaScript versions, OS versions, browser versions,....
PS
There is a new HTTP polling duplex mode added in Silverlight 4 RC, called “MultipleMessagesPerPoll”, makes this technology even more interesting