2016-10-09 5 views
0

У меня есть файл под названием client.js, который require("child_process").fork() s до source.js, просто чтобы все было чище. Однако где-то в fork он выполняет другой процесс и вызывает ошибку EADDRINUSE, когда я создаю сервер http, используя connect. Как я могу исправить это, чтобы создать сервер http без ошибок?Викинг в другой файл вызывает EADDRINUSE?

Моего source.js выглядит (несколько) это:

app.use(serve(cwd)); 
app.use(function(req, res){ // code }); 

var server = http.createServer(app); 
server.listen(8080); 
server.on("listening", function(){ 
    console.log("server running with: "); 
    console.log(" port: "+process.env.PORT); 
}); 
+0

'EADDRINUSE' означает, что есть что-то уже слушает на определенном TCP порт, поэтому Короткий ответ be: _ "не использовать уже используемый TCP-порт" _. Длительный ответ зависит от того, что именно вы пытаетесь сделать, о чем ваш вопрос не уточняется. – robertklep

+0

Непонятно, почему вы пытаетесь развить, но, предполагая, что вы собираетесь использовать масштабируемость, проверьте модуль «cluster», это делает управление более подходящим. – Paul

+0

@Paul кластер дает мне чертовски на моей IDE, есть ли лучший вариант? – baranskistad

ответ

1

На системном уровне, вилка() является своим родом что-то вроде:

  1. Вычислить память для текущего процесса (родителя)
  2. Забронировать этот размер в памяти
  3. Скопируйте весь процесс, включая, но не ограничиваясь тоже:
    • состояния
    • открытых розетки открытого Fd в
    • и т.д.
  4. Если и только если вышеописанный шаг вернул ненулевую ошибку, затем очистить эту памяти и использовать его для запуска раздвоенного ребенка, поддерживая a comm канал с родителем

Итак, на шаге 3 вилка пытается открыть СНОВА вашего порта прослушивания, поэтому вы получаете ошибка

Традиционное решение, вероятно, будет разветвляться перед выполнением сервера , но в смысле узла теоретически не должно быть причин для разветвления, в первую очередь, даже меньше, если вы разыгрываете другой «узел», обработать.

Возможно, вы могли бы решить с помощью какого-то асинхронного вызова(), или в зависимости от вашей версию узла, даже использовать Обещания

+0

Я вызываю прослушивание после вызова fork(). – baranskistad

+0

И я думал, что вся причина fork() заключалась в том, чтобы сделать разработку чище. Есть ли альтернатива, которую я должен использовать? – baranskistad

+0

Ну, это зависит от того, что делает source.js. Не может дать вам общий ответ. – mtsdev

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

  • Нет связанных вопросов^_^