Я просто хотел попробовать SPDY, используя пакет узла "node-spdy".
Мой javascript:
EDIT: Теперь скрипт включает информацию о сертификатах. Я взял их из тестового приложения twitlog.
var spdy = require('spdy'),
fs = require('fs');
var options = {
key: fs.readFileSync(__dirname + '/keys/spdy-key.pem'),
cert: fs.readFileSync(__dirname + '/keys/spdy-cert.pem'),
ca: fs.readFileSync(__dirname + '/keys/spdy-csr.pem')
};
var spdy = require('spdy');
var server = spdy.createServer({}, function(req, res) {
console.log('Send response...');
res.writeHead(200, {
"Content-Type": "text/plain"
});
res.write("Hello World!\n");
res.end();
console.log('Response has been sended.');
});
server.listen(3000);
Моя проблема: функция обратного вызова никогда не выполняется, соответственно узел никогда не регистрирует "Отправить ответ..." или "Ответ отправлен". Я просто получаю пустой ответ, но node.js не выдает исключение:
Фелер 324 (net::ERR_EMPTY_RESPONSE)
Моя конфигурация на стороне сервера: я использую node.js (версия 0.7.6) и node-spdy (commit eafd9c9fdd
) под Windows Se7en.
Моя конфигурация на стороне клиента: я использую сборку хрома в качестве браузера, чтобы протестировать spdy. Во время тестов я не использую SSL, поэтому мне пришлось изменить конфигурацию. Вот что вы можете найти в разделе about:net-internals/#spdy
:
==SPDY Status==
SPDY Enabled: true
Use Alternate Protocol: false
Force SPDY Always: true
Force SPDY Over SSL: false
Next Protocols:
Моя отладка на стороне клиента. Служба отладки хрома about:net-internals/#tests
сообщает мне:
Result Experiment Error Time (ms)
FAIL Fetch http://localhost:3000/
Don't use any proxy EMPTY_RESPONSE (-324) 3022
Fetch http://localhost:3000/
Use system proxy settings ? ?
EDIT: Поскольку я добавил информацию о сертификате, информация об отладке на стороне клиента немного изменилась. Вот самый новый:
Result Experiment Error Time (ms)
FAIL Fetch https://localhost:3000/
Don't use any proxy ABORTED (-3) 9
FAIL Fetch https://localhost:3000/
Use system proxy settings ABORTED (-3) 300489
FAIL Fetch https://localhost:3000/
Use Firefox's proxy settings ABORTED (-3) 4
FAIL Fetch https://localhost:3000/
Use system proxy settings ABORTED (-3) 300438
Мои средства отладки на стороне сервера. Вот что сообщает мне встроенный отладчик узлов, когда я получаю запрос:
EDIT: Отладка на стороне сервера не изменится, даже если я добавлю в сценарии информацию о сертификате.
debug>n
break in net.js:865
863
864 function onconnection(clientHandle) {
865 var handle = this;
866 var self = handle.socket;
867
debug>
break in net.js:866
864 function onconnection(clientHandle) {
865 var handle = this;
866 var self = handle.socket;
867
868 debug('onconnection');
debug>
break in net.js:868
866 var self = handle.socket;
867
868 debug('onconnection');
869
870 if (!clientHandle) {
debug>
break in net.js:870
868 debug('onconnection');
869
870 if (!clientHandle) {
871 self.emit('error', errnoException(errno, 'accept'));
872 return;
debug>
break in net.js:875
873 }
874
875 if (self.maxConnections && self.connections >= self.maxConnections) {
876 clientHandle.close();
877 return;
debug>
break in net.js:880
878 }
879
880 var socket = new Socket({
881 handle: clientHandle,
882 allowHalfOpen: self.allowHalfOpen
debug>
break in net.js:884
882 allowHalfOpen: self.allowHalfOpen
883 });
884 socket.readable = socket.writable = true;
885
886 socket.resume();
debug>
break in net.js:886
884 socket.readable = socket.writable = true;
885
886 socket.resume();
887
888 self.connections++;
debug>
break in net.js:888
886 socket.resume();
887
888 self.connections++;
889 socket.server = self;
890
debug>
break in net.js:889
887
888 self.connections++;
889 socket.server = self;
890
891 ;
debug>
break in net.js:892
890
891 ;
892 self.emit('connection', socket);
893 socket.emit('connect');
894 }
debug>
break in net.js:893
891 ;
892 self.emit('connection', socket);
893 socket.emit('connect');
894 }
895
debug>
break in net.js:894
892 self.emit('connection', socket);
893 socket.emit('connect');
894 }
895
896
debug>
Мой вопрос: я просто хочу вернуть клиенту простое текстовое сообщение с помощью SPDY. Как я могу сделать это с помощью node.js? - Если вам нужно больше деталей, пожалуйста, скажите мне. Спасибо за ваши ответы.
It is not possible to run node-spdy without SSL.
Я попытаюсь узнать об этом побольше, или кто-нибудь из вас что-то знает об этом факте? - person fridojet   schedule 14.05.2012