2015-04-09 15 views
16

Jak mogę zintegrować node.js i IO gniazda w kreatorze kodu.Integracja węzła js i gniazda IO z podpisem kodu

<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> 

Jak wspomniano w tym pytaniu dotyczącym SO here. Mój plik widoku z codeigniter jest w localhost/myproject, ale nodejs słucha portu przy użyciu localhost:8000. Jak więc podłączyć socket IO. Podobnie jak

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

Jak to jest możliwe?

+0

ścieżka jest ignorowana przez serwer gniazd, chyba że używa go do konfiguracji jakoś, które gniazdo. io nie. – dandavis

+0

Nie mogę zrozumieć, co mówisz. Czy mógłbyś to dokładniej wyjaśnić? – user254153

+0

Spójrz na ten moduł, 'https: // github.com/nodejitsu/node-http-proxy' –

Odpowiedz

3

Myślę, że nie rozumiesz jak działa socket.io. Nigdy nie słuchałbyś swojego widoku CI. Zawsze będziesz wysyłać wiadomości do (i odbierać wiadomości od) serwera NodeJS na porcie 8000. Widoki Codeigniter są po prostu statyczne i nie ma powodu, aby "słuchać" go, ponieważ będzie on ładowany tylko raz.

Kluczowym punktem z that answer you referenced:

użytkownicy będą używać CodeIgniter URL i po otwarciu strony, mam ten skrypt na moim CI widoku strony, która łączy się z moim app Nodejs

Dlatego ładujesz przeglądarkę w widoku CI, a następnie nasłuchujesz zdarzeń z serwera NodeJS za pośrednictwem JavaScript w widoku CI.

Następnie można przekazywać zdarzenia do serwera NodeJS z poziomu JavaScript w widoku CI.

+0

Czy chcesz powiedzieć, że nodejs nie słucha ścieżki adresu URL. Czy możesz dać mi prosty przykład, jak mogę połączyć nodejs i CI. Dzięki za odpowiedź. – user254153

+0

NodeJS nasłuchuje na porcie 8000, a Apache nasłuchuje na porcie 80. Nie "komunikują się", chyba że dzieje się to gdzieś po stronie serwera. – seangates

3

Zastosowanie Dnode, jest to system asynchroniczny RPC dla node.js sprawia, że ​​rozmawiać z php (i odwrotnie), bezpośrednio (strona php można zadzwonić na kontrolerze CodeIgniter)

pisałem posta LinkedIn niedawno o tym

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

w poradniku napisanym dla dnode przez jej założyciela istnieje jakiś nieświeży kod, więc użyć przykładowego kodu w moim linkedin postu, również po cenach dumpingowych poniżej (lepszą formatowania niż 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

Czy dnode jest biblioteką podobną do popychacza lub jego modułu nodejs. – user254153

+0

to moduł nodejs, a także moduł php, działa również z wieloma innymi językami, kliknij, aby połączyć i przeczytać, łączy się z samouczkiem, aby zaimplementować sposób komunikacji między użytkownikami i php, w obie strony. – serdarsenay

+0

do opracowania, tak ma moduł npm, a także kompozytor w php * – serdarsenay

1

Oto przepływ masz zamiar chcesz osiągnąć:

1) node.js konfigurację serwera z socket.io gniazd (.Na). Jeśli chcesz, aby węzeł node.js pracował nad gniazdem 80, sprawdź, czy iptables przesyła port 80 do portu 3000.

2) Dodaj klienta socket.io do projektu zapalnika kodu. Będziesz używać tego do początkowego połączenia z połączeniem node.js/socket.io w widoku CI.

3) Skonfiguruj różne zdarzenia w widoku, aby wyzwolić emitery na serwerze, a także co powinno się stać po odebraniu wiadomości z gniazda. tj: kliknij przycisk, aby dodać element do strony, emitowałby go na serwer, a następnie możesz otrzymać od serwera komunikat od serwera i zaktualizować widok tak, aby był aktualny.

1

można bezpośrednio połączyć plik socket.io.js w widoku kodu.

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

wtedy będzie w stanie dokonać połączenia z serwerem nodejs od http://localhost/myproject

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

Jednak ten sposób można wykonywać wszystkie twe kodu po stronie klienta w widoku CodeIgniter. Jeśli chcesz użyć silnika szablonów nodejs do wysyłania stron html do przeglądarki, możesz zmienić port serwera node.js na 80.