Solucionado (ver solução)
Solucionado
(ver solução)
7
respostas

Erro ao subir cluster

Fiz o cluster como esta descrito na atividade , no entanto ao tentar subir as threads na mesma porta da o seguinte erro

Error: bind EADDRINUSE null:3000 at listenOnMasterHandle (net.js:1405:16) at rr (internal/cluster/child.js:121:12) at Worker.send (internal/cluster/child.js:88:7) at process.onInternalMessage (internal/cluster/utils.js:42:8) at process.emit (events.js:185:15) at emit (internal/child_process.js:783:12) at process._tickCallback (internal/process/next_tick.js:114:19) Emitted 'error' event at: at listenOnMasterHandle (net.js:1406:21) at rr (internal/cluster/child.js:121:12) [... lines matching original stack trace ...] at process._tickCallback (internal/process/next_tick.js:114:19)

sei que também da para passar o número da porta como abaixo descrito

cluster.fork({PORT:3001})

nesse caso funciona , o problema está ao matar o processo , pois não conseguiria subir o mesmo na mesma porta que estaria trabalhando

Como resolver isso?

7 respostas

Oi Júlio, tudo bem? Pelo erro, me parece que você não está informando um host. Está NULL:3000. Eu estou na dúvida se você pode subir dois processos na mesma porta, meu chute é que sim, mas não é tão simples assim.

solução!

Pois bem, no exercício proposto ele sobe na mesma porta sim , agora passando uma outra porta para cada processo ele vai de boa, queria entender como foi feito no exercício , não sei se a mudança da versão poderia estar influenciando

Sim, mas pelo que vi, seu problema não está sendo em relação a porta Júlio, mas sim o host, não está indo localhost:3000, está indo null:3000, null não é um host. :(

Mas vejo que já marcou o tópico como solucionado. Você conseguiu resolver o problema? O que era?

Olá Wanderson , o erro foi o seguinte

O código estava assim

const os = require('os')
const cluster = require('cluster')
const express = require('express')

const app = express()

if (cluster.isMaster) {
    console.log('is master')

    for (let i = 0; i < os.cpus().length; i++) {
        cluster.fork()
    }

    app.listen(3000,_=>{
        console.log('Ouvindo na porta 3000')
    })

então , notei que não tinha como deixar sem o else , pois teria que manter para não ocorrer o erro

Opa Júlio, mas no código que postou aqui não tem else :/

Então é justamente esse o erro, o app.listen teria que ficar dentro do else , por isso o erro

if (cluster.isMaster) {
    console.log('is master')

    for (let i = 0; i < os.cpus().length; i++) {
        cluster.fork()
    }
}else{ // Esse else que esqueci
    app.listen(3000,_=>{
        console.log('Ouvindo na porta 3000')
    })
}

Entendi! Bom, como você já marcou como resolvido, já podemos parar de discutir sobre esse assunto. Qualquer dúvida, posta no fórum que estamos de olho.