2013-04-07 2 views
1

Согласно W3C specification on Server-Sent Events:Альтернативы HTTP-chunking для постоянных соединений?

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

Как именно я буду заниматься этой серверной стороной в node.js? Установка заголовка Content-Length на самом деле не является вариантом, потому что соединение в идеале никогда не должно закрываться. Установил ли бы заголовок ответа Transfer-Encoding на identity или полностью удалить заголовок Transfer-Encoding?

ответ

2

Узел автоматически будет использовать кодировку chunked, если вы явно не указали длину или вручную установите кодировку передачи. Было бы неплохо также установить Connection: close, так как вы, очевидно, не будете поддерживать соединение открытым после того, как сервер завершит отправку событий.

res.setHeader('Transfer-Encoding', 'identity'); 
res.setHeader('Connection', 'close'); 
+0

Но соединение должно оставаться открытым неограниченное время и установка заголовка 'Connection' на' close' немедленно закроет соединение. –

+0

@MatthewDean 'Connection: close' сообщает браузеру, что сокет будет закрыт после отправки всех данных, что и произойдет именно так. Это не значит, что он немедленно закроется. Он будет оставаться открытым до тех пор, пока сервер не назовет 'res.end()'. Если вы явно не указываете длину или не используете кодировку передачи, единственный способ для браузера знать, что больше не будет данных с сервера, для закрытия соединения. – loganfsmyth

+0

Ах. Что касается несвязанной заметки, есть ли у вас какие-либо идеи, почему кодирование с коротким кодированием будет менее надежным для событий, связанных с сервером? –

Смежные вопросы