2012-02-07 12 views
11

Vorrei eseguire un server WebSocket su un ruolo di lavoro in Azure.Fleck in esecuzione (o qualsiasi) server Websocket su Windows Azure

Questo funziona correttamente localmente sull'emulatore, ma è presente un prompt del firewall di Windows la prima volta che viene eseguito il server socket.

Mi chiedo se qualcuno saprebbe come superare i problemi di connessione relativi ai socket su Azure.

mia implementazione server socket: OnStart

var server = new WebSocketServer("ws://theappname.cloudapp.net:8080/"); 

server.Start(socket => 
{ 
    socket.OnOpen =() => 
    { 
     Trace.WriteLine("Connected to " + socket.ConnectionInfo.ClientIpAddress,"Information"); 
     _sockets.Add(socket); 
    }; 
}); 
.... etc 

L'applicazione client:

var socket = new WebSocket("ws://theappname.cloudapp.net:8080"); 

socket.onopen = function() { 
    status.html("Connection Opened"); 
}; 
socket.onclose = function() { 
    status.html("Connection Closed"); 
} 

Lo stato cambia closed pochi secondi dopo il caricamento della pagina.


mio punto finale per il ruolo dei lavoratori sotto:

WebSocket Input http 8080 <Not Set>


Ora ho cercato di eseguire il binding all'indirizzo IP interno utilizzando il seguente:

RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["WebSocket"].IPEndpoint.ToString();


SOLUZIONE

Per motivi di chiunque altro affrontare questa nell'attuazione WebSockets su Azure;

  1. Il firewall probabilmente negherà la connessione se non sulla porta 80 o 8080, quindi creare una distribuzione separata per esso.

  2. L'endpoint deve essere impostato su TCP e non su HTTP per la creazione delle regole firewall corrette. (Vedi immagine)

Endpoint Configuration

+2

Solo per motivi di prova, perché non si modifica l'Input Endpoit dal protocollo "http" a "tcp". E impostare esplicitamente la porta locale su 8080 (che nel tuo caso è ). Inoltre, è necessario tenere presente che il bilanciamento del carico di Windows Azure può interrompere qualsiasi connessione inattiva per oltre 60 secondi. – astaykov

+0

@astaykov - Il tuo commento ha portato alla soluzione, per favore pubblica qui sotto così posso + crederti. Grazie. – f0x

+0

@astaykov Avete la piena implementazione?Sto cercando di far funzionare la mia e non l'ho mai fatto prima. – Yecats

risposta

8

Solo per motivi di prova, perché non si modifica l'Input Endpoit dal protocollo "http" a "tcp". E imposta esplicitamente la porta locale su 8080 (che nel tuo caso è). Inoltre, è necessario tenere presente che il bilanciamento del carico di Windows Azure può interrompere qualsiasi connessione inattiva per oltre 60 secondi, pertanto è consigliabile implementare una sorta di soluzione "ping" per mantenere aperta la connessione.

+0

Grazie per i commenti aggiuntivi su come mantenere aperta la connessione, stava prendendo in considerazione qualcosa di simile. – f0x

+0

Sono contento di poterti aiutare! – astaykov

+0

La connessione non sta mantenendo inviando PING dal protocollo stesso? Il protocollo –

0

si potrebbe desiderare di dare un'occhiata a questo video introduttivo che Steve Marx (@smarx) ha messo insieme su how to run node.js on Windows Azure.

+0

Grazie, ho lavorato molto con node.js e socket.io; sfortunatamente questo non è il contesto con cui mi sono presentato. – f0x

Problemi correlati