Сервер nodejs «получает» этот поток JSON из Twitter и отправляет его клиенту:
stream.twitter.com/1/statuses/filter.json?track=gadget
Данные, возвращаемые клиенту, представляют собой «фрагментированный» JSON и JSON.parse (chunk) иeval ('(' + chunk + ')') на стороне клиента приводит к ошибкам синтаксического анализа.Объединение фрагментов и ожидание события 'end' также не является решением
Я заметил, что в предыдущих примерах использовалось что-то подобное на стороне клиента, которое, очевидно, работало раньше:
socket.onmessage = function(chunk) {
data = eval("(" + chunk.data + ")");
alert(data.user.screen_name);
Я использую это на стороне клиента, и это приводит к ошибке синтаксического анализа:
var socket = new io.Socket();
socket.on('message', function(chunk) {
var data = eval('(' + chunk + ')'); // parsing error
alert(data.screen_name):
Я знаю, что он успешно возвращает кусок JSON с:
var socket = new io.Socket();
socket.on('message', function(chunk) {
alert(chunk): // shows a JSON chunk
Сервер:
response.on('data', function (chunk) {
client.each(function(e) {
e.send(chunk);
});
Что-то изменилось или что-то еще я делаю неправильно?
ОБНОВЛЕНИЕ: Событие 'end' не запускается из-за потоковой передачи?
http.get({
headers: { 'content-type': 'application/json' },
host: 'stream.twitter.com',
path: '/1/statuses/filter.json?track...
}, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
client.each(function(e) {
e.send(chunk);
});
});
// does not fire
res.on('end', function () {
});
...
Я смотрю на разницу с http 1.0 и http 1.1 в том, что касается отправки фрагментированных данных.