Нужна простая передача данных в браузер с помощью 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>