Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!

GET ws://wsrpc.mosquito.su/ws/ HTTP/1.1
Host: wsrpc.mosquito.su
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://wsrpc.mosquito.su
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.99 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4
Sec-WebSocket-Key: cp5b9j20tvZtX5n70kyYXw==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
HTTP/1.1 101 Switching Protocols
Server: nginx
Date: Thu, 22 Jan 2015 05:17:53 GMT
Connection: upgrade
Upgrade: websocket
Sec-WebSocket-Accept: iWSx/PeUVE8B3ti9ZjYa2WjiSIQ=
proxy_read_timeout 60;
proxy_send_timeout 60;


that this application will be used by a small number of administrative users, so it's not going to be used by thousands of users simultaneously.
и как гласит caniuse.com WebSocket не поддерживается только в Opera Mini (надо бы провести голосование, как давно кто-либо видел Opera Mini)
ws.onmessage = function (message) {
log('WSRPC: ONMESSAGE CALLED (' + self.public.state() + ')');
trace(message);
var data = null;
if (message.type == 'message') {
try {
data = JSON.parse(message.data);
log(data.data);
if (data.hasOwnProperty('type') && data.type === 'call') {
if (!self.routes.hasOwnProperty(data.call)) {
throw Error('Route not found');
}
out = {
serial: data.serial,
type: 'callback',
data: self.routes[data.call](data.arguments)
};
self.socket.send(JSON.stringify(out));
WebSocket RPC или как написать живое WEB приложение для браузера