Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript]Node.js i socket.io kilka pytań
d.stp
post 16.11.2016, 23:39:56
Post #1





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Witam, mam kilka pytań związanych z socket.io i node.js. Obie rzeczy zainstalowałem tak jak należy i działają dobrze.

1. Jak wchodzę na swoją stronę to musze port dopisywać np. www.strona.pl:port - czy da się bez konieczności tego portu?
2. Strona nie działa dopóki w konsoli nie wklepie node xxx.js i nie wlącze tego. Jak to zrobić, żeby to automatycznie działało?
3. Jest jakiś dobry poradnik (najlepiej PL) dot. node i socket.io?

Jak widać jestem zielony w temacie dlatego proszę o pomoc.

Pozdrawiamm!
Go to the top of the page
+Quote Post
emstawicki
post 17.11.2016, 08:11:50
Post #2





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Cytat
1. Jak wchodzę na swoją stronę to musze port dopisywać np. www.strona.pl:port - czy da się bez konieczności tego portu?

Ustaw nasłuchiwanie na domyślnym porcie protokołu http (80) lub https (443)
Cytat
2. Strona nie działa dopóki w konsoli nie wklepie node xxx.js i nie wlącze tego. Jak to zrobić, żeby to automatycznie działało?

Musisz jakoś zainicjować aplikację. Tutaj kilka rozwiązań w zależności od systemu, na którym uruchamiasz nodejs. Np. możesz uruchamiać to jako wirtualny terminal (screen), użyć managera processów (pm2), albo uruchamiać nodejs jako usługę.
Cytat
3. Jest jakiś dobry poradnik (najlepiej PL) dot. node i socket.io?

Najlepiej korzystaj z oficjalnych dokumentacji, które są aktualne i adekwatne do wersji, której używasz (https://nodejs.org/docs/latest-v5.x/api/).


--------------------
Jak w Olsztynie, to tylko w Revolver Rock Cafe .
Sprawdź postęp propagacji DNS
Go to the top of the page
+Quote Post
by_ikar
post 17.11.2016, 08:28:53
Post #3





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

Ostrzeżenie: (0%)
-----


Cytat
Ustaw nasłuchiwanie na domyślnym porcie protokołu http (80) lub https (443)


Jeżeli ma już coś pod tym portem, to nie będzie mógł dwóch rzeczy jednocześnie podpiąć. Kwestia tego jak on to ma dokładnie zrobione.

Cytat
3. Jest jakiś dobry poradnik (najlepiej PL) dot. node i socket.io?


socket.io pomimo swojej popularności ma bardzo kiepską dokumentacje, jest ona po prostu mała. Więc pomyśl jak to będzie wyglądać w języku polskim. Po prostu, naucz się podstaw angielskiego, bo bez tego w świecie programowania to nic nie osiągniesz. Ja już od kilku lat nawet nie próbuje szukać jakichś informacji dotyczących programowania po polsku. Zwyczajnie nie ma to sensu.
Go to the top of the page
+Quote Post
d.stp
post 17.11.2016, 09:21:25
Post #4





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Znam angielski w miarę ok, ale nie potrafię czytać dokumentacji w tym języku :/ próbowałem też z książką dot. node, ale w dwóch empikach jak byłem tak w żadnym nie ma. Widocznie będę musiał zamówić z helionu bo jest fajna (podobno) książka do tego smile.gif

Mam serwer dedykowany, z zainstalowanym debian 8x. emstawicki, a które rozwiązanie będzie najlepszy? Próbuję napisać czat na działającej już od dawna stronie internetowej, gdzie czat obecnie jest napisany w php+ajax i mysql. W przypadku większej ilości userów online robią się lagi co skłoniło mnie do ponownego napisania tego czatu i właśnie postawiłem na node js + socket.io

Może ktoś doradzić albo nakierować?

I jeszcze pytanie, bo w JS łączę się z bazą danych dzięki modułowi mysql z node, ale tam mam odkryte dane do połączenia z bazą danych. Przecież tak nie może być biggrin.gif co zrobić co?

Ten post edytował d.stp 17.11.2016, 09:23:46
Go to the top of the page
+Quote Post
emstawicki
post 17.11.2016, 09:26:19
Post #5





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Cytat
Jeżeli ma już coś pod tym portem, to nie będzie mógł dwóch rzeczy jednocześnie podpiąć. Kwestia tego jak on to ma dokładnie zrobione.

O tym kolega nic nie wspominał, równie dobrze może mieć na porcie 80 postawiony serwer poczty smile.gif

Rozszerzając już samo stwierdzenie "Jeżeli ma już coś pod tym portem, to nie będzie mógł dwóch rzeczy jednocześnie podpiąć.":
Może mieć uruchomione nasłuchiwanie dwóch usług na porcie 80 (np. httpd oraz skrypt nodejs) tylko na innych interfejsach sieciowych przy wykorzystaniu TCP (socket.io używa webSocket, które tak naprawdę jest połączeniem TCP).
Inna sprawa jest gdy używamy aplikacji, korzystających z protokołu UDP - multicast pozwala na nasłuchiwanie na tym samym porcie (nie dotyczy to tematu nodejs + socket.io, ale obala pochopne stwierdzenie NIE MOŻNA).

@update:
Co do tematu bezpieczeństwa skryptów, nie mogą one znajdować się w publicznym folderze. Wygodnym rozwiązaniem jest też stworzenie pliku konfiguracyjnego np. /etc/myChat/database.conf gdzie albo exportujesz dane do zmiennych środowiskowych (potem łatwo możesz się do nich odwołać np. process.env.MY_CONF_SQL_HOST) albo wczytywać przez nodejs.

@update2:
d.stp napisz dokładnie jak obecnie masz skonfigurowany serwer i wtedy poszukamy rozwiązania. smile.gif

Ten post edytował emstawicki 17.11.2016, 09:31:28


--------------------
Jak w Olsztynie, to tylko w Revolver Rock Cafe .
Sprawdź postęp propagacji DNS
Go to the top of the page
+Quote Post
d.stp
post 17.11.2016, 09:41:10
Post #6





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


No ok dzięki, trochę mnie naprowadziłeś co do ukrycia danych do bazy smile.gif

Jakiś pomysł z resztą? Chcę napisać czat na stronie php+mysql w node js i socket.io i właśnie nie wiem co i jak. W necie nic nie mogę znaleźć.

Sam czat itd to raczej prosta sprawa, z tym że tutaj nie mogę poradzić sobie z takimi rzeczami:

1. Nie wiem jak podłączyć to na mojej stronie. W osobnym folderze jak wszystko wrzucę itd to działa jak należy. Mogę użyć iframe z ładowanem chat.html gdzie node będzie ustawione na ten folder? Zatrybi?
2. Co w końcu z tym nasłuchiwaniem portu mam zrobić? Nie wiem w sumie czy mam coś na porcie 80, ale po próbie zmiany:
https://s21.postimg.org/ca5r1vrbb/Przechwytywanie.png

3. Plik "aplikacji" mam w index.js i jego próbuję odpalić a wygląda on tak:

Kod
var express = require('express'),
  app = express(),
  server = require('http').createServer(app),
  io = require('socket.io').listen(server);

server.listen(process.env.PORT || 80);

app.get('/',function(req,res){
  res.sendFile(__dirname+'/index.html');
});
io.sockets.on('connection', function (socket) {

   console.log("Socket connected.");

   socket.on('message', function(msg){
     io.emit('message', msg);
   });


});


za to index.html (gdzie mam czat):

Kod
var socket = io();
    var mysql      = require('mysql');
    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'xxx',
      password : 'xxx',
      database : 'xxx'
    });
    
    connection.connect();
    
    $('form').submit(function(){
       socket.emit('message', $('#msg').val());
       $('#msg').val('');
        connection.query('INSERT INTO czat VALUES (null, 1, 1, now(), 1 )');
      
       return false;
    });

    connection.end();


Oczywiście to nie działa. Nie dodaje mi rekordu do bazy danych. W konsoli przez putty fajnie pokazuje: https://s21.postimg.org/lxlzledzr/Przechwytywanie.png przy każdym wejściu na stronę.

@emstawicki, co dokładnie potrzebujesz z konfiguracji serwera?

Ten post edytował d.stp 17.11.2016, 09:44:49
Go to the top of the page
+Quote Post
emstawicki
post 17.11.2016, 09:53:17
Post #7





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Źle podszedłeś do tematu.

Traktuj skrypt nodejs jako "serwer czatu", gdzie będzie cała obsługa, niech nie renderuje widoków tylko obsługuje żądania.
Po stronie serwera httpd będzie korzystanie z serwera czatu.

Zobacz jak jest zbudowany projekt:
https://github.com/lovelle/jquery-chat

Może to pozwoli nakreślić Tobie zasadę działania i użycia. Zobacz serwer chatu (nodejs) nadal działa na porcie 3000.
ps. oczywiście zamiast redisa możesz użyć mysql

Błąd ze screena to chyba właśnie próba nasłuchiwania TCP na tym samym interfejsie i porcie co pewnie działa Tobie usługa httpd - dlatego pytałem o konfigurację.


--------------------
Jak w Olsztynie, to tylko w Revolver Rock Cafe .
Sprawdź postęp propagacji DNS
Go to the top of the page
+Quote Post
d.stp
post 17.11.2016, 10:00:29
Post #8





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


No okej. To jest póki co mega test dla mnie więc kompletnie nie dbam o strukturę itd. Chciałbym żeby tylko to działało i będę kombinował dalej. Powoli może coś z tego skleję.

Dalej nie wiem czemu nie mogę dodać rekordu do bazy. Co w tym skrypcie jest nie haloo? :/
Go to the top of the page
+Quote Post
emstawicki
post 17.11.2016, 10:08:10
Post #9





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Skrypt dodawania do bazy nie może być w pliku html, który wysyłasz. Ten plik ze skryptem wykonuje się po stronie klienta!!! Nawet o tym nie myśl.
Tak jak napisałem serwer czatu nie ma renderować widoku bo od tego masz serwer http tylko przyjmować żądania i wysyłać odpowiedzi (np. w json).


--------------------
Jak w Olsztynie, to tylko w Revolver Rock Cafe .
Sprawdź postęp propagacji DNS
Go to the top of the page
+Quote Post
d.stp
post 17.11.2016, 10:36:14
Post #10





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


Dobra szefie zrozumiałem exclamation.gif aarambo.gif dzięki.

A byłbyś jeszcze na tyle miły, że pokazać jakiś przykład jak te dane przekazać json?
Go to the top of the page
+Quote Post
emstawicki
post 17.11.2016, 11:48:11
Post #11





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Nie chodzi tutaj o szefowanie, ale jeżeli masz plik html z osadzonym js i w nim np. funkcję wykonajSQL(zapytanie), to chcę abyś był świadomy, że to jest wykonywana funkcja po stronie KLIENTA (czyt. po stronie przeglądarki zenka).
Co za tym idzie? - zenek może otworzyć konsolę i wpisać wykonajSQL('DROP TABLE `users`) i wiesz co się stanie?

Przykład - najlepiej prześledź przykład podany na githubie. Wiem, że wygląda na obszerny projekt, ale niech cię to nie odstrasza, uważam, że krok po kroku, plik po pliku najlepiej poznasz praktyczne i w miarę prawidłowe zastosowanie tej technologii. A w razie pytań, kopiuj linikję pliku, której nie rozumiesz i pytaj tutaj wink.gif

Sam serwer na nodejs:
https://github.com/lovelle/jquery-chat/blob.../node/server.js


--------------------
Jak w Olsztynie, to tylko w Revolver Rock Cafe .
Sprawdź postęp propagacji DNS
Go to the top of the page
+Quote Post
d.stp
post 17.11.2016, 17:29:28
Post #12





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


A z innej beczki. W czym najlepiej napisać dobry, bez lagów czat web dla 1000 osób online? smile.gif
Go to the top of the page
+Quote Post
emstawicki
post 18.11.2016, 08:36:16
Post #13





Grupa: Zarejestrowani
Postów: 207
Pomógł: 40
Dołączył: 2.06.2016
Skąd: Olsztyn

Ostrzeżenie: (0%)
-----


Myślę że nodejs i socket.io jest dobrym rozwiązaniem. Możesz zrobić to w c++ gcc, pythonie, albo jeżeli dobrze pamiętam chat facebooka (albo, któraś wersja) była napisana w erlangu.
PHP i ajax też dadzą radę (możesz też użyć websockets w php), a wydajność określa bardziej Twoja maszyna, konfiguracja i przede wszystkim rzetelność i przemyślanie kodu. Twoim obecnym problem, że zużywasz zasoby na niepotrzebnym odpytywaniu serwera na temat nowych wiadomości (ale to tylko domniemanie smile.gif ).


--------------------
Jak w Olsztynie, to tylko w Revolver Rock Cafe .
Sprawdź postęp propagacji DNS
Go to the top of the page
+Quote Post
d.stp
post 19.11.2016, 21:40:59
Post #14





Grupa: Zarejestrowani
Postów: 358
Pomógł: 0
Dołączył: 19.04.2012

Ostrzeżenie: (0%)
-----


A w PHP + ajax da radę takowy zrobić? nodejs chyba mnie przerosło ph34r.gif sciana.gif
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 7.06.2025 - 20:35