2015-04-09 20 views
16

Come integrare node.js e socket IO nell'accensione codice.Integrare nodo js e socket IO con codeigniter

<script> 

     // create a new websocket 
     var socket = io.connect('http://localhost:8000'); 
     // on message received we print all the data inside the #container div 
     socket.on('notification', function (data) { 
     var usersList = "<dl>"; 
     $.each(data.users,function(index,user){ 
      usersList += "<dt>" + user.user_name + "</dt>\n" + 
         "<dd>" + user.user_description + "\n" + 
          "<figure> <img class='img-polaroid' width='50px' src='" + user.user_img + "' /></figure>" 
         "</dd>"; 
     }); 
     usersList += "</dl>"; 
     $('#container').html(usersList); 

     $('time').html('Last Update:' + data.time); 
     }); 
    </script> 

Come accennato in questa domanda SO here. Il mio file di visualizzazione con codeigniter è in localhost/myproject ma nodejs ascolta port utilizzando localhost:8000. Quindi, come posso collegare socket IO. Mi piace

var socket = io.connect('http://localhost:8000'); 
//here I need to make socket IO listen to localhost/myproject instead of localhost:8000 . 

Com'è possibile?

+0

il percorso viene ignorato dal server socket, a meno che non lo utilizzi per la configurazione in qualche modo, quale socket. io no. – dandavis

+0

Non riesco a capire cosa stai dicendo. Puoi per favore elaborarlo più chiaramente. – user254153

+0

Dai un'occhiata a questo modulo, 'https: // github.com/nodejitsu/node-http-proxy' –

risposta

3

Penso che tu abbia frainteso come funziona il socket.io. Non ascolteresti mai la tua vista CI. Avresti sempre inviato messaggi (e ricevendo messaggi dal) server NodeJS sulla porta 8000. Le visualizzazioni di Codeigniter sono semplicemente statiche e non c'è motivo di "ascoltarla" poiché caricherà solo una volta.

Il punto chiave da that answer you referenced:

utenti utilizzeranno CodeIgniter URL e quando è aperto nella pagina, ho questo script sulla mia pagina di visualizzazione CI che si collega alla mia Nodejs app

Pertanto, si carica il browser con la vista CI, quindi si ascoltano gli eventi dal server NodeJS attraverso il codice JavaScript nella vista CI.

È inoltre possibile inviare eventi al server NodeJS dal codice JavaScript nella vista CI.

+0

Intendevi che nodejs non ascolta il percorso dell'URL. Puoi darmi un semplice esempio su come posso collegare nodejs e CI. Grazie per la risposta. – user254153

+0

NodeJS è in ascolto sulla porta 8000 e Apache sta ascoltando sulla porta 80. Non "comunica tra loro" a meno che non venga eseguito da qualche parte sul lato server. – seangates

3

Usa Dnode, si tratta di un sistema di RPC asincrono per node.js che lo rende parlare con php (e viceversa) direttamente (lato PHP è possibile chiamare sul controller CodeIgniter)

ho scritto un post recente linkedin su questo

https://www.linkedin.com/pulse/make-php-nodejs-talk-each-other-serdar-senay

nel tutorial scritto per dnode dal suo fondatore c'è qualche codice stantio, in modo da utilizzare il codice di esempio nel mio post linkedin, anche scaricato sotto (con la formattazione meglio di linkedin):

require ('vendor/autoload.php'); 
$loop = new React\EventLoop\StreamSelectLoop(); 
// Connect to DNode server running in port 7070 and call argument with Zing 33 
$dnode = new DNode\DNode ($loop); 
$dnode-> connect (7070, function ($remote, $connection) { 
    // Remote is A That Provides Proxy object Methods us all from the Server 
    $remote-> zing(33, function ($n) Use ($connection) { 
    echo "n = {$n}\n"; 
    // Once We Have the Result We Can close the connection 
    $connection->end(); 
    }); 
}); 
$loop-> Run(); 
+0

È dnode qualche libreria come pusher o il suo modulo nodejs. – user254153

+0

è un modulo nodejs, così come un modulo php, e funziona anche con molte altre lingue, fare clic per collegare e avere una lettura, si collega a un tutorial per implementare un modo di nodejs e php che parlano tra loro, entrambi i modi. – serdarsenay

+0

per elaborare, sì, ha un modulo npm e compositore in php * – serdarsenay

1

Ecco il flusso si sta andando a voler raggiungere:

1) Node.JS configurazione del server con prese socket.io (.on). Se si desidera avere node.js che funziona su socket 80, cercare di avere iptables forward port 80 in port 3000.

2) Aggiungere il client socket.io al progetto di accodamento codice. Lo utilizzerai per effettuare la connessione iniziale alla connessione node.js/socket.io nella Vista CI.

3) Impostare i diversi eventi nella vista, per attivare le emittioni sul server e ciò che dovrebbe accadere quando si riceve un messaggio socket. vale a dire: fare clic su un pulsante per aggiungere un elemento alla pagina, emetterebbe sul server, e quindi si potrebbe avere il client ricevere un messaggio dal server e aggiornare la vista in modo che sia attuale.

1

è possibile collegare direttamente socket.io.js nella vista codeigniter.

<script type='text/javascript' src='http://localhost:8000/socket.io/socket.io.js'></script> 

allora si sarà in grado di effettuare la connessione al server nodejs da http://localhost/myproject

var socket = io.connect('http://localhost:8000'); 

Tuttavia, questo modo si farà tutto il codice lato client in vista CodeIgniter. Se si desidera utilizzare il motore di template nodejs per inviare pagine html al browser, è possibile modificare la porta del server node.js su 80.