2010-10-01 9 views

risposta

0

Un server Node.js non è in alcun modo associato a un browser Web come client. Qualsiasi programma può utilizzare qualsiasi libreria di socket fornita dalle sue librerie di supporto per effettuare una chiamata a un server Node.js.

EDIT

In risposta al tuo commento: non dimenticate che è Node.js Javascript! Se si desidera eseguire periodicamente il codice, in modo analogo a un processo daemon, è possibile utilizzare setInterval per eseguire una richiamata ogni n millisecondi. Dovresti essere in grado di farlo proprio lì nel tuo programma di nodo.

+0

Sì, ho assistente node.js esecuzione .... I voglio solo essere in grado di ottenere aggiornamenti in tempo reale sul mio client tramite websocket senza utilizzare il browser sul lato client ... in pratica, voglio che un processo daemon client ascolti il ​​messaggio push in tempo reale dal mio server node.js. .. Sto usando il nodo anche dal lato client ... Tuttavia, non sono sicuro di come fare a processare il nodo un deamon .... il nodo non è bloccante .... mentre sto chiedendo al client di bloccare (while loop on sock.onmessage). – haijin

+0

@haijin: risposto al tuo commento nella mia risposta –

+0

Ho trovato il lib python websock che ha funzionato bene per il mio caso ... Buono. http://freeasinbeard.org/post/1008785379/python-websocket-a-websocket-client-library-for – haijin

4

Remy Sharp (@rem) ha scritto un'implementazione Socket.io-client che funziona sul server. Credo che questo è ciò che stai cercando: https://github.com/remy/Socket.io-node-client

+0

Socket.io-node-client non è un'implementazione "websocket senza browser", è uno shim che abilita le comunicazioni client "browserless socket.io". ha chiesto espressamente "websocket senza browser". Socket.io-node-client utilizza l'implementazione WebSocket socket-client-test, che supporta solo la vecchia bozza WebSocket hixie 75/76; non (attualmente) emula l'oggetto WebSocket ora in uso dai browser moderni, quindi non è appropriato per l'uso come implementazione generale "websocket senza browser". né Socket.io-node-client né il WebSocket del test client di socket.io sono la scelta giusta. –

+0

Non mi interessa le sfumature di "browserless websocket" rispetto a "browserless socket.io", voglio solo un modo semplice per comunicare tra due processi node.js e questo sembra adattarsi al progetto. – ColinM

9

raccomandazione attuale

Usa WebSocket-Node con il mio codice wrapper (vedi sotto). Al momento della stesura di questo documento, nessun altro progetto pubblico che conosca supporta la nuova specifica hybi, quindi se vuoi emulare le versioni attuali del browser, avrai bisogno di WebSocket-Node. Se vuoi emulare i browser più vecchi, come Safari mobile su iOS 4.2, avrai bisogno anche di una delle altre librerie elencate di seguito, ma dovrai gestire tu stesso le collisioni dei nomi oggetto "WebSocket".

Segue un elenco di implementazioni client WebSocket pubbliche per node.js.

Socket.IO implementazione WebSocket

Il socket.io client-test fa hixie progetto 75/76, ma a partire da questa scrittura, non hybi 7+.

https://github.com/LearnBoost/socket.io/blob/master/support/node-websocket-client/lib/websocket.js

mi sto chiedendo se intendono aggiornare hybi 7+: http://groups.google.com/group/socket_io/browse_thread/thread/d27320502109d0be

Node-websocket-client

"node-websocket-client" di Peter Griess fa hixie draft 75/76, ma al momento della stesura, non hybi 7+.

https://github.com/pgriess/node-websocket-client/blob/master/lib/websocket.js

WebSocket-Node

di Brian McKelvey WebSocket-Node dispone di un'implementazione client per hybi 7-17 (versione del protocollo 7-13), ma l'implementazione non fornisce un browser stile Oggetto WebSocket.

https://github.com/Worlize/WebSocket-Node

Ecco il codice wrapper che uso per emulare l'oggetto del browser in stile WebSocket:

/** 
* Wrapper for Worlize WebSocketNode to emulate the browser WebSocket object. 
*/ 
var WebSocketClient = require('./WorlizeWebSocketNode/lib/websocket').client; 

exports.WebSocket = function (uri) { 
    var self = this; 
    this.connection = null; 
    this.socket = new WebSocketClient(); 
    this.socket.on('connect', function (connection) { 
    self.connection = connection; 

    connection.on('error', function (error) { 
     self.onerror(); 
    }); 

    connection.on('close', function() { 
     self.onclose(); 
    }); 

    connection.on('message', function (message) { 
     if (message.type === 'utf8') { 
     self.onmessage({data:message.utf8Data}); 
     } 
    }); 

    self.onopen(); 
    }); 
    this.socket.connect(uri); 
} 

exports.WebSocket.prototype.send = function (data) { 
    this.connection.sendUTF(data); 
} 

SockJS

Solo per riferimento, SockJS di Marek Majkowski non include un client nodo. La libreria client di SockJS è semplicemente un browser dom wrapper.

https://github.com/sockjs/sockjs-client

Problemi correlati