Нужна простая передача данных в браузер с помощью node.js

На стороне сервера я использую node.js для создания распределенного асинхронного пинг-понга. Теперь мне нужно отобразить результаты в виде графика в реальном времени в клиентском браузере. Чтобы все было просто, в настоящее время я использую URL-адрес диаграммы Google на основе изображений и ограничиваю объем данных, которые будут отображаться. В конечном итоге этот клиентский дисплей будет богатым и интерактивным.

Я понимаю, что одним из способов заставить мой сервер выталкивать данные в браузер является Comet. Я ожидаю, что на стороне браузера должен быть соответствующий сокет, поэтому оба должны идти вместе.

Q1: для прототипирования: какой самый простой способ для меня передать строковые данные из node.js в браузер Firefox 3.6.10? Строка обновляется менее 1 КБ один раз в секунду.

Q2: Для производства: любые рекомендации для подхода, который будет работать в браузерах, включая мобильные устройства? Бинарные обновления порядка 100 КБ в секунду, без изображений или видео.

Ответ 1

Я действительно рекомендую взглянуть на http://socket.io/ для Node.js. Он работает на мобильных устройствах и поддерживает несколько методов для эффекта кометы, которые вы желаете, используя лучший вариант, доступный браузеру.

Это тоже довольно просто, хотя у него нет каналов, но это простой способ обхода с помощью socket.broadcast(msg, [array containing every user except those 'subscribed'])

Ответ 2

Каждые два секунды сервер генерирует случайное число r1 в [0,100], а затем клиент сообщений для рисования piechart с r1 и r2 = 100-r1. Тем не менее, для реализации широковещательной передачи, предлагаемой для нескольких клиентов. Любые другие предложения по улучшению приветствуются.

Серверная сторона (в coffeescript):

http = require('http')
io = require('socket.io')

server = http.createServer( )

server.listen(8000)

socket = io.listen(server)

myrand = (client) -> setInterval( -> 
    r1 = Math.floor(Math.random()*101)
    r2 = 100-r1
    client.send(String(r1) + ',' + String(r2))
, 2000)

socket.on('connection', (client) -> myrand(client))

Клиентская сторона (index.html с javascript):

<h1>My socket client</h1>

<script src="http://cdn.socket.io/stable/socket.io.js"></script>

<div id="piechart">
Hello World
</div>

<script>
socket = new io.Socket('localhost:8000');
socket.connect();
socket.on('message', function(data){
    url = 'http://chart.apis.google.com/chart?cht=p3&chs=250x100&chd=t:' + data + '&chl=Hello|World';  
    document.getElementById('piechart').innerHTML = "<img src="+ url + "></img>";
});
</script>