480499497
|
Posted: Sun Aug 05, 2012 20:23 Post subject: |
|
|
понял как производиться вывод в консоль ошибок в Син. Вставляем файл SynWr$$.txt из TEMP в таком случае, Син способен перехватывать консольные ответы со всего что угодно и с командной строки тоже. Но это никак не влияет на проблему. Батник не помог. Независимо от того запускаю я через:
батник с вызовом нового процесса cmd /c и вызовом скрипта
батник с прямым вызовом скрипта
cmd и передачу параметра /c"node.exe" {FileName}
сразу через node.exe и параметр {FileName}
все 4 варианта вешают Син. Почему это происходит не имею ни малейшего представления. Могу только предположить что как раз из-за перехвата консоли. Син пытается заполнить SynWr$$.txt и будет пытаться это делать до тех пор пока скрипт сервера запущен, а сам файл закрыт для обращения, так как в него Син пытается внести изменения. Тоесть нужно выносить функцию формирования этого файла и вызов внешнего обработчика отдельным процесом а не обрабатывать в Syn.exe (либо реализовывать механизм вызова внешнего приложения так что бы син не вешался, и чтение файла консоли переделывать так что бы или вообще файл не применять а работаь с масивами, к ним доступ не блокируется виндой как к файлу).
В первом варианте описаного мною запуска через батник с вызовом командной строки у нас получается такое дерево процессов:
Syn.exe
run.bat (либо cmd.exe зависимо от настроек винды)
cmd.exe
node.exe
и все дружно ожидают завершения последнего процесса который собственно демон и будет висеть пока я в ручную его не грохну.
Собственно в этом и загвоздка, вызывать node.exe независимо от Син.
Примеры скрипктов (нужно иметь установленый Node.js)
server.js
Code: | var http = require("http");
http.createServer(function(request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}).listen(8888); |
Что бы вызвать ответ об ошибке, перед строкой }).listen(8888); добавить строку ();
убедиться что скрипт работает http://localhost:8888
run.bat
Code: |
cmd /c"c:\Progra~1\nodejs\node.exe" server.js
|
либо если ассоциировать нод и файлы то
Posted after 16 minutes:
п.с. Разумеется если использоваться команду start в батнике вместо обращения к цмд, то будет вызван новый независимый процесс, но в нем нет возможности обмена консолью с родительским процессом, поэтому скрипт будет работать но без перехвата.
Code: | start "c:\Program Files\nodejs\Node.exe" server.js |
|
|