Come si può rendere visibile un servizio in esecuzione su una porta casuale?

2

Voglio creare un servizio che verrà eseguito localmente (non accessibile da Internet) su una determinata porta, quindi un'estensione del browser dovrà accedere a questo servizio.

Il mio problema è che non posso sapere quale porta sarà disponibile in anticipo, quindi dovrei sceglierne una più o meno a caso e avrò bisogno dell'estensione per scoprire quale porta è.

Mi chiedo quale sarebbe un buon modo per implementarlo?

Ho pensato a due soluzioni:

  1. Lato servizio: seleziona le porte casuali finché non ne è disponibile una e avvia il servizio su questa porta. Lato estensione: analizza tutte le porte e esegui il ping fino a quando non viene trovato il servizio (il servizio avrà un endpoint / ping e risponderà con una stringa specifica che può essere riconosciuta).

  2. Servizio: avere un elenco di porte preselezionate (ad esempio 8900, 8901, 8902) e trovare il primo disponibile. Lato interno: esegue la scansione di tutte le porte nell'elenco finché non viene trovato il servizio.

Penso che nessuna di queste soluzioni sia così bella. 1. è probabilmente molto lento e inefficiente. 2. è un po 'migliore ma crea un accoppiamento tra l'app e il servizio, che dovranno entrambi conoscere l'elenco delle porte possibili. Anche se questa lista viene mai modificata, sia il servizio che l'app dovranno essere aggiornati allo stesso tempo altrimenti l'app non sarà in grado di trovare il servizio. Inoltre è un problema se per qualche ragione tutte le porte in quell'elenco non sono disponibili.

Quindi in sostanza non sono sicuro di quale sia l'approccio migliore qui? Forse lo sto guardando male?

    
posta this.lau_ 14.05.2018 - 14:00
fonte

2 risposte

2

Ti consiglierei di fare l'opzione n. 2 e il rispetto del seguente elenco di porte: Elenco dei numeri di porta di numeri da evitare.

    
risposta data 14.05.2018 - 14:28
fonte
6

Nei sistemi "enterprise", l'individuazione dei servizi viene spesso gestita dal servizio pubblicitario stesso in una posizione ben nota, nota come registro del servizio.

Dopo che il servizio ha trovato una porta aperta e l'avvio completato, contatta il registro del servizio e fornisce le informazioni di connessione. Altri software che dipendono dal servizio controllano il registro di servizio all'avvio per le informazioni di connessione per il servizio.

Questo disaccoppia i componenti (servizio e estensione browser, nel tuo caso) l'uno dall'altro, ma richiede una terza applicazione con informazioni di connessione statiche per fungere da registro di servizio.

Questo potrebbe essere eccessivo per il tuo caso d'uso, ma potrebbe avere senso se hai già un componente dell'applicazione che potrebbe fungere da registro di servizio.

    
risposta data 14.05.2018 - 15:59
fonte

Leggi altre domande sui tag