Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Μπα, το socket.io δε μου κανει....Επισης, αν εχω καταλαβει καλα, το socket.io δεν ακολουθει την "παραδοσιακη" συνταξη των websockets (σε js) αλλα εχει μια δικια του.

 

Οπως και να χει, το προβλημα λυθηκε, ηταν γελιο και γω ηλιθιος. Με πατεντα. Συνδεομουν στη βαση με "λαθος" χρηστη που τα δικαιωματα του δεν περιλαμβαναν το insert στον πινακα controller. *facepalm*

 

Btw εχεις ορισει κανα προτοκολο επικοινωνιας στο handshake;

Δημοσ.

Εννοεις, UTF, binary ή stream array? Μαλλο οχι, αυτα ειναι οι τυποι δεδομενων που μπορεις να στειλεις...

Δε ξερω παπι, με πιανεις αδιαβαστο....Θες να με βοηθησεις λιγο? Τι εννοεις?

Δημοσ.

Εδω εισαι....

    var connection = request.accept(null, request.origin);
    console.log((new Date()) + ' Connection accepted.');
	
    connection.on('message', function(message) {				
				
        var ja=message.utf8Data;
		
        var conString = "pg://username:password@localhost:1234/slevinDataBase";   

    var client = new pg.Client(conString);
    client.connect();
    var query = client.query('  SELECT p_name FROM pins WHERE p_id ='+ja)


query.on("row", function (row, result) {
    result.addRow(row);});


for (var i=0; i<result.rows.length; i++){
 connection.send(
 '<details open><summary><b>Αποτελέσματα Αναζήτησης</b></summary><b>Όνομα</b></br>'
		   +result.rows[i].p_name+'</details>'

          }

    client.end();
});

Δημοσ.

1) Εχεις blocking την accept; 

2) Δεν καταλαβαινω γιατι θελεις socket για το παραπανω. Τα socket ειναι για streams δηλαδη για "περιπλοκη" επικοινωνια, το παραπανω ειναι απλα ενα get. 

Ετσι οπως το εγραψες στην αρχη εγω νομιζα οτι θελεις κατι σα database viewer σε client. 

Δημοσ.

Το node ειναι event driven, αυτο ειναι και το μεγαλο του "ατου" κατα την γνωμη μου.

 

Οταν λεμε blocking function εννοουμε οτι αυτη η συναρτηση μπλοκαρει τον κωδικα. Δηλαδη ο κλασικος κωδικας.

 

πχ blocking

var mysql = require('mysql');

function write(msg) {
    console.log(msg);
}
write(0);
//blocking
var con = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'papi',
    database: 'test'
});
write(1);
con.connect();
var res = con.query('insert into test_tbl values(null,\'sadas\',\'test1aasd\')');
write(2);
con.end();
write(3);

Στο παραπανω τα παντα ειναι blocking δηλαδη ο κωδικας θα εκτελεστει ετσι οπως τον βλεπεςι αρα θα εχεις σα output 0 1 2 3

 

απο την αλλη υπαρχουν οι nonblocking function πχ

var mysql = require('mysql');

function write(msg) {
    console.log(msg);
}
//nonblocking

write('1');
var con = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'papi',
    database: 'test'
});

con.connect(function (err) {
    write('2');
    con.query('insert into test_tbl values(null,\'test1\',\'test1a\')',
        function (err, res) {
            write('3');
        });
    write('4');
    con.end(function (err) {
        write('5');
    });
    write('6');
});
write('7');

Εδω εχεις ως blocking μονο τα write και την mysql.create... ολα τα υπολοιπα ειναι nonblocking. Εδω η εκτελεση ειναι λογο περιεργη. Θα αρχισει με το write(1) μετα θα παει στο var con = mysql.... μετα θα κανει register ενα callback πανω στο connect και μετα απευθειας παει στο write('7') ! 

 

Για αυτο λεγονται Nonblocking, επειδη δεν μπλοκαρουν τον κωδικα. Τελος,

τα write('2'), write(4), και write(6) θα εκτελεστουν με την σειρα (εφοσον αυτα ειναι blocking) οταν το con συνδεθει με την βαση

 

το write('3') θα εκτελεστει οταν το query θα παρει τα αποτελεσματα

το write(5) οταν κλεισει η συνδεση

 

να και το output

Your environment has been set up for using Node.js 0.10.10 (ia32) and npm.

C:\Users\papi>cd my documents

C:\Users\papi\My Documents>cd js

C:\Users\papi\My Documents\js>node blocking.js
0
1
2
3

C:\Users\papi\My Documents\js>node noneblocking.js

module.js:340
    throw err;
          ^
Error: Cannot find module 'C:\Users\papi\My Documents\js\noneblocking.js'
    at Function.Module._resolveFilename (module.js:338:15)
    at Function.Module._load (module.js:280:25)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:901:3

C:\Users\papi\My Documents\js>node nonblocking.js
1
7
2
4
6
3
5

C:\Users\papi\My Documents\js>

Εαν το καταλαβεις ολο αυτο που προσπαθω να σου πω, τοτε θα βρεις και ενα σοβαρο λαθος που εχεις σε αυτο που μου ποσταρες.

Δημοσ.

Παπί σωστό αυτό που λες ότι το node είναι event-driven, πάρα αυτά εγω πέρα απο το να ανοίγεις σύνδεση με τη βάση δε βρίσκω άλλα θετικά στο node. Δηλ. θα στήσεις http server μέσω javascript ποιο το νόημα όταν έχεις nginx ο πρώτος http event driven server και απο τους πιο lightweight;  Ή μήπως θα κάνεις file manipulation και io μέσω javascript; Φοβάμαι οτι ανοίγεις ένα σωρο προβλήματα ασφάλειας έτσι. Αναγνωρίζω βέβαια ότι είναι επαναστατική εξέλιξη στο web όμως έτσι, να εξηγούμαι.

Υ.Γ : Σόρρυ κιόλας απο το topic starter για το hijacking του thread, ελπίζω να γνωρίζεις οτι ο χρήστης που συνδέεται στη βάση πρέπει να έχει αυστηρά δικαιώματα.

Δημοσ.

Απλα το βρισκω ενδιαφερον για αυτο και το προμοταρω. Btw ο http server δεν ειναι τιποτα το ιδιαιτερο, μονο rest αναλαμβανει και απο αυτο μονο τα κλασικα post get. Ολη η δουλεια πεφτει στους Interpreters που φτιαχνουν τις σελιδες.

Δημοσ.

@mad

Μην είσαι κακός με την node :)

 

Use case scenario για τη node:

Real-time

Ας πούμε ότι θες να διαβάσεις ένα real-time api, όπως αυτό του instagram, να κάνεις κάποια επεξεργασία πάνω σε αυτά τα data και τέλος να τα παρουσιάσεις στο χρήστη μόλις τα λάβεις, χωρίς να έχεις τον client να κάνει requests συνεχώς για το αν υπάρχουν νέες πληροφορίες και για να μη καλεί ο server συνεχώς το web service για το αν έχεις καινούρια data ή όχι.

 

Άλλο scenario είναι να θέλεις να κάνεις requests π.χ. σε 3 διαφορετικά webservices. Σκέψου την περίπτωση ενώς traveling website. Θέλεις να κάνεις κράτηση πτήσης, δωματίου και αυτοκινήτου. Για τις 3 αυτές πληροφορίες ζητάς από 3 διαφορετικές υπηρεσίες να σου δώσουν στοιχεία. Μπορείς να κάνεις και τα 3 requests και non-blocking να εμφανήσεις στο χρήστη ότι στοιχεία λαμβάνεις πρώτα, χωρίς να περιμένεις να επιστρέχουν όλα τα responses και όπως στο πιο πάνω παράδειγμα, χωρίς polling.

 

Τέλος η node.js κάνει χρήση του google v8 engine που κάνει compile javascript κώδικα σε machine code.

 

Φυσικά δεν είναι η μόνη λύση, π.χ. δες την GO, αλλά σίγουρα σου δίνει το πλεονέκτημα να ξεκινήσεις γρήγορα με τη γλώσσα στη περίπτωση που ξέρεις javascript :)

Δημοσ.

@παπί.

Ναι ρε φιλε, ειχα διαβασει και για το nonblocking κ απ οτι φαινετε το διελυσα ομως.

Ευχαριστω που μοιραζεσαι γνωση και με ξεστραβωσες.

Ναι, ειδα τη δαφορα, τουλαχιστον εμπειρικα. Για nonblocking τα δηλωνω ολα ως "functions" πχ

con.end(function (err) {

Το λαθος , αν καταλαβα σωστα, ειναι οτι εχω blocking μεσα σε blocking?

 

@mad-professor Κανενα προβλημα ρε συ, ετσι κ αλλιως, οσο πιο πολυ αναπτυσουμε ενα θεμα τοσο πιο πολυ μαθαινουμε.

 

Ευχαριστω ολους για τις παρατηρησεις σας.

Δεν "προλαβαινω" να τσεκαρω σερβερ side κωδικα τωρα, να τον αλλαξω σε nonblocking , γτ φτιαχνω client side τωρα. Να τελειωσει, και μετα.

Μολις πιασω server side παλι, θα επανελθω με νεο ποστ.

Δημοσ.

Χρησιμοποιεις το result χωρις να εχει γεμισει για αυτο λεω οτι εχεις ενα bug.

<< Για nonblocking τα δηλωνω ολα ως "functions" πχ>> βασικα για nonblocking πρεπει να υπαρχει τεκμηριωση. Το "παιρνει function" ειναι "παιρνει callback" το οποιο δεν σημαινει οτι ειναι nonblocking πχ jquery.each παιρνει callback αλλα δεν ειναι nonblocking.

  • 4 χρόνια αργότερα...
Δημοσ.

γεια σας παιδια.
εψαχνα για websockets στο Google και επεσα πανω σας.

Ασχολουμε με τα websockets λιγο καιρο και εχω φτιαξει 1-2 πραγματακια χωρις την χρηση καποιου γνωστου framework .
Ενα demo chat μπορειτε να το δειτε εδω. https://sockets.oasbets.com 
και εναν MSSQL-Editor ( στυλ phpadmin) που μπορειτε να το δειτε εδω. https://sockets.oasbets.com:8444/
αν καποιος θέλει τιποτα custom πανω σε websockets ας μου στειλει πμ.

καλή χρονια σε ολους τους κομπουτεραδες.

 

  • Like 1

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...