slevinkelevra Δημοσ. 4 Αυγούστου 2013 Δημοσ. 4 Αυγούστου 2013 Γεια Ακομα ενα προβλημα με websockets, αυτη τη φορα πολυ πιο εξειδικευμενο, γ αυτο και ξεκιναω νεο θεμα. Φτιαχνω ενα αρχειο html που εχει μια φορμα για εισαγωγή δεδομενων σε database. Χρησιμοποιω websockets γιατι πιο μετα, θα ανεβαζω και εικονες απο τον ιδιο κωδικα (κατι μου λεει , θα κολλησω και εκει ! ) Σκεφτηκα οτι μια "και ειμαι εδω" ας ανοιξω δυο ξεχωριστες συνδεσεις websockets απο τον ιδιο client. Η μια ενεργοποιηται μολις ο χρηστης συμπληρωσει το πεδιο "Ονομα " της φορμας. Το websocket στελνει την τιμη του πεδιου στο σερβερ, οπου κει τσεκαρετε αν υπαρχει ακριβως το ιδιο ονομα στη βαση και απανταει στον πελατη με ενα μηνυμα τυπου "Προσοχη, αυτο το ονομα υπαρχει ηδη. Πιθανη διπλο-εγγραφη." Η αλλη συνδεση ενεργοποιειτε προφανως οταν εχει συμπληρωθει όλη η φορμα και στελνει τα δεδομενα για εισαγωγη στη βαση. Σκεφτηκα οτι ειναι καλη ιδεα να στελνω πινακες με δεδομενα στον σερβερ. Για να ξεχωριζω τι πρεπει να γινει. Δηλαδη αν το πρωτο πεδιο του πινακα ειναι "name" απλα καλεσε τη function που τσεκαρει για διπλα ονοματα. Σαν "ονομα" παρε το δευτερο πεδιο του πινακα. Απαντα και στον πελατη. Αν το πρωτο πεδιο ειναι "insert" καλεσε τη function που εισάγει. Σαν δεδομενα παρε τα υπολοιπα πεδια του πινακα. Απαντα και στον πελατη. Δημιουργησα δυο απλα αρχειακια με πινακες που εχουν αριθμους, για τεσταρισμα Και δεν δουλευει. Ο client συνδεετε. Στελενει τα δεδομενα. Ουτε λαθη βλεπω σε client ή σερβερ. Αλλα ο σερβερ δεν απανταει ποτε, οπως θα επρεπε Δινω και τους κωδικες πιο κατω...Ελπιζω να βοηθησουν server-side function WebSocketTest1(){ var a=1; var b=2; var c = [a,b]; var so = new WebSocket("ws://localhost:1337"); so.onerror=function (evt) {message.textContent = evt;} so.onopen = function(){ message.textContent = "opened"; so.send(c); message.textContent = "sended"; } so.onmessage = function (evt) { var received_msg = evt.data; document.getElementById("message").innerHTML=received_msg; } } function WebSocketTest2(){ var d=3; var e=4; var f = [d,e]; var sa = new WebSocket("ws://localhost:1337"); sa.onerror=function (evt) {message2.textContent = evt;} sa.onopen = function(){ message2.textContent = "opened"; sa.send(f); message2.textContent = "sended"; } sa.onmessage = function (evt) { var received_msg = evt.data; document.getElementById("message2").innerHTML=received_msg; } } </script> </head> <input type="button" value="one" onClick="WebSocketTest1()"><br/> <input type="button" value="two" onClick="WebSocketTest2()"><br/> <body> <div id="message"></div> mesage2</br> <div id="message2"></div> </body> </html> server-side snippets εδω χρησιμοποιω κωδικα για να ξεχωριζω τα session και να απανταει ο σερβερ σε ενα καθε φορα, αυτο που του ζητησε πραγματα. τον κωδικα βρηκα Site: https://github.com/Worlize/WebSocket-Node/wiki/How-to%3a-List-all-connected-sessions-&-Communicating-with-a-specific-session-only">εδω var connections = {}; var connectionIDCounter = 0; var connection = request.accept(null, request.origin); // Store a reference to the connection using an incrementing ID connection.id = connectionIDCounter ++; connections[connection.id] = connection; console.log((new Date()) + ' Connection accepted.'); connection.on('message', function(message) { var ja=message; if(ja[0]==1) {ja[1]=7;} else if(ja[0]==3) {ja[1]=8;} }); connection.on('close', function(reasonCode, description) { console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); delete connections[connection.id]; }); }); // Send a message to a connection by its connectionID function sendToConnectionId(connectionID, data) { var connection = connections[connectionID]; if (connection && connection.connected) { connection.send(ja[1]); } Τελικα η "καλη ιδεα" μου, μαλλον δεν ειναι τοσο καλη. Καμια συμβουλη / παρατηρηση? Εναλλακτικη ισως? Ευχαριστω πολυ για το χρονο σας
παπι Δημοσ. 4 Αυγούστου 2013 Δημοσ. 4 Αυγούστου 2013 Να ενα σεναριο. Εντολες sql απευθειας απο τον client. server var mysql = require('mysql'); var ws = require('ws'); var server = new ws.Server({ port: 8089 }); server.on('connection', function (client) { var clientSqlConnection; client.on('message', function (msg) { var packet = JSON.parse(msg); switch (packet['command']) { case 'connect': clientSqlConnection = mysql.createConnection(packet['connectionInfo']); clientSqlConnection.connect(function (err) { if (err) client.send(JSON.stringify({ responsefor: 'connect', status: 'error', error: err })); else client.send(JSON.stringify({ responsefor: 'connect', status: 'ok' })); }); break; case 'query': if (clientSqlConnection == null) client.send(JSON.stringify({ responsefor: 'query', status: 'error', erro: 'connection object null' })); else clientSqlConnection.query(packet['querydata'], function (err, res) { if (err) client.send(JSON.stringify({ responsefor: 'query', status: 'error', error: err })); else client.send(JSON.stringify({ responsefor: 'query', status: 'ok', data: res })); }); break; case 'closesql': if (clientSqlConnection == null) client.send(JSON.stringify({ responsefor: 'closesql', status: 'error', error: 'null connection object' })); else clientSqlConnection.end(function (err) { if (err) client.send(JSON.stringify({ responsefor: 'closesql', status: 'error', error: err })); else client.send(JSON.stringify({ responsefor: 'closesql', status: 'ok' })); }); break; } }); }); client <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> #TextArea1 { height: 115px; width: 645px; } #input { height: 115px; width: 1011px; } </style> <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script> </head> <body> <div style="height: 264px"> <input id="connectBtn" type="button" value="Connect" /><br /> user:<input id="userTxt" type="text" value="root" /><br /> pass:<input id="passTxt" type="text" value="papi"/><br /> database:<input id="databaseTxt" type="text" value="test"/><br /> host:<input id="hostTxt" type="text" value="localhost"/><br /> <input id="executeBtn" type="button" value="Execute" /><br /> <br /> <div style="height: 237px"> <textarea id="input" name="S1"></textarea><br /> <div style="height: 96px" id="output"> </div> </div> </div> </body> <script type="text/javascript"> var ws = new WebSocket('ws://localhost:8089'); function createTableFromResoults(obj) { var tbl = "<table border='1'>"; var addHeaders = function (obj) { $.each(obj, function (header, value) { tbl += '<th>' + header + '</th>'; }); }; var addValues = function (obj) { tbl += '<tr>'; $.each(obj, function (header, value) { tbl += '<td>' + value + '</td>'; }); tbl += '</tr>'; }; if ($.isArray(obj)) { addHeaders(obj[0]); $.each(obj, function (i, val) { addValues(val); }); } else { addHeaders(obj); addValues(obj); } tbl += '</table>'; return tbl; } $('#connectBtn').click(function () { if ($('#connectBtn').val() == 'Connect') ws.send(JSON.stringify({ command: 'connect', connectionInfo: { host: $('#hostTxt').val(), user: $('#userTxt').val(), password: $('#passTxt').val(), database: $('#databaseTxt').val() } })); else ws.send(JSON.stringify({ command: 'closesql' })); }); $('#executeBtn').click(function () { ws.send(JSON.stringify({ command: 'query', querydata: $('#input').val() })); }); ws.onmessage = function (msg) { var packet = JSON.parse(msg.data); switch (packet['responsefor']) { case 'connect': if (packet['status'] == 'ok') $('#connectBtn').val('Disconnect'); else $('#output').append(packet['error'] + '<br/>'); break; case 'query': if (packet['status'] == 'ok') { $('#output').html(createTableFromResoults(packet.data)) .fadeOut() .fadeIn(); } else $('#output').append(packet['error']); break; case 'closesql': if(packet['status'] == 'ok') $('#connectBtn').val('Connect'); else $('#output').append(packet['error']); break; } }; </script> </html> sorry για το απΑισιο html. Δεν ειναι το ατου μου (οπως και το js) σκατα βγηκε το video....................
slevinkelevra Δημοσ. 5 Αυγούστου 2013 Μέλος Δημοσ. 5 Αυγούστου 2013 Μια χαρα παραδειγμα ειναι, ευχαριστω...Και η html μια χαρα, και το βιντεο. Πολυ clean και μαζεμενος κωδικας. Τελικα και το δικο μ δουλεψε, και το ανακαλυψα τυχαια. Για καποιο λογο, ο πινακας οταν φτανει στον σερβερ εχει τη δομη [1,2] οποτε pinakas[0]=1 pinakas[1]=, pinakas[2]=2 Οποτε για να τα στειλει πισω στον client επρεπε να ειχα βαλει να στελενει το pinakas[2] , οχι το pinakas[1] Οποτε, συμφωνα με τα παραπανω το client side μενει οπως ειναι και το server side γινετε var connections = {}; var connectionIDCounter = 0; var connection = request.accept(null, request.origin); // Store a reference to the connection using an incrementing ID connection.id = connectionIDCounter ++; connections[connection.id] = connection; console.log((new Date()) + ' Connection accepted.'); connection.on('message', function(message) { var ja=message.utf8Data; if(ja[0]==1){ja[2]; connection.send(ja[2]) } else if(ja[0]==3){ja[2]; connection.send(ja[2]) } }); connection.on('close', function(reasonCode, description) { console.log((new Date()) + ' Peer ' + connection.remoteAddress + ' disconnected.'); delete connections[connection.id]; }); }); Ευχαριστω για την απαντηση. Ελπιζω τα παραπανω να βοηθησουν οσους εχουν ιδια προβληματα
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα