2016-04-22 5 views
0

Wenn Benutzer eine GET/check/Gesundheit, sollte dieser Client mit Server sprechen und Server sollte dem Client die Antwort geben .. Aber die Nachricht vom Server wird nicht auf der Client ..Knoten - fungiert als Webserver und Client

Seite-Client - auch als Webserver handeln

var io = require('socket.io-client'); 
var socket = io.connect('http://localhost:4000', {reconnect: true}); 
var express = require('express'); 
var app= express(); 
var path = require('path'); 
var bodyParser= require('body-parser'); 
app.use(express.static(__dirname+"/public/")); 
app.use(bodyParser.json()); 
app.set('views',path.join(__dirname,'/public/html')); 
app.engine('html', require('ejs').renderFile); //specify which template engine to use 
app.set('view engine', 'ejs'); 

app.get('/check/health',function(req,res){ 
    //console.log('Connected Success!!'); 
    socket.on('connect', function(socket) { 
    console.log('Connected!'); 
    }); 
    socket.emit('data', 'I need your health status'); 

    socket.on('data', function(data) { 
    console.log('Message from monitoring is : ' + ': ' + data); 
    }); 

    socket.on('server data', function(data) { 
    console.log('Received server data: ' + data); 
    }); 
}); 

app.listen(3000); 
console.log("Server running at http://localhost:3000/'"); 

Seite Server:

var app = require('express')(); 
var SERVER = require('http').Server(app); 
var io = require('socket.io')(SERVER); 
var express = require('express'); 

var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/sensor_db'); 

io.on('connection', function(socket){ 
    console.log('connection received from Provisioning '); 

    // To get messages from Provisioning server 
    socket.on('data', function(data) { 
    console.log('Message from provision is : ' + ': ' + data); 
    }); 

    socket.emit('server data', 'Here is yiour data - 1111'); 

}); 

SERVER.listen(4000, function(){ 
    console.log('listening on *:4000'); 
}); 
+0

Fragen zu Standalone müssen; nicht auf eine andere Antwort/Frage verweisen. –

+0

Dies ist technisch eigenständig, abgesehen von dem Satz, der auf eine andere Frage verweist. Hier gibt es genug Code, um eine Antwort für das Problem zusammenzustellen. – dvlsg

+0

Ich bin mir nicht sicher, warum die Nachricht des Servers nicht auf dem Client zu sehen ist –

Antwort

0

Es gibt eine Reihe von Problemen, aber diese ma in einem ist, dass der Server-Side-Code die folgende sehr wichtige Linie fehlt:

http.listen(4000); 

, dass das Hinzufügen sollten Sie unten den Einstieg auf dem richtigen Weg. Außerdem würde ich vorschlagen, die http Variable zu etwas anderem umzubenennen, da es nicht das http Modul ist. server macht mehr Sinn für mich.

Hier ist ein minimales Beispiel für das, was Sie tun möchten. Es fehlen ein paar Dinge wie die Fehlerbehandlung, wenn man bedenkt, was passieren soll, wenn eine Anfrage an /check/health kommt und Ihre socket.io-Verbindung nicht aktiv ist, usw., aber ich überlasse das als Übung für Sie. Ich habe auch einige Dinge, die für die Frage nicht relevant waren (Mungo, Ejs, Templating, etc.), gekürzt, also musst du diese wieder hinzufügen, wenn du sicher bist, dass dieses Stück wie vorgesehen funktioniert.


Client Side

var io = require('socket.io-client'); 
var socket = io.connect('http://localhost:4000', { reconnect: true }); 
var express = require('express'); 
var app= express(); 
var path = require('path'); 

// careful here -- the socket.io connection will be made 
// outside of the context of the /check/health callback, 
// so you should move the connect event handler out here. 
socket.on('connect', function(socket) { 
    console.log('Connected!'); 
}); 

app.get('/check/health',function(req,res){ 

    // note the third argument here, 
    // which can be used as an acknowledgement from the server 
    // that your client's emit was received 
    socket.emit('data', 'I need your health status', function ack(data) { 
    console.log('data emit was acknowledged:', data); 

    // make sure you send something back to the requester 
    // or they'll just hang until timeout 
    return res.json(data); 
    }); 

    // if you want, you could technically use socket.once('server data'), 
    // in this location, but this is probably going to be closer 
    // to the style of communication you actually want -- 
    // which is one response to this specific single socket emit. 
}); 

app.listen(3000); 
console.log('Server listening at port 3000'); 

Server Side

var app = require('express')(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 
var express = require('express'); 

io.on('connection', function(socket){ 
    console.log('connection received from Provisioning'); 

    // To get messages from Provisioning server 
    socket.on('data', function(data, ack) { 
    console.log('Message from provision is : ' + ': ' + data); 
    ack('here is your data - 1111'); 
    }); 
}); 

server.listen(4000, function(){ 
    console.log('socket.io server listening on *:4000'); 
}); 
+0

http.listen (4000, function() { console.log ('hört auf *: 4000'); }); –

+0

der obige Code ist auf dem Server dide vorhanden, mein Fehler nicht hinzuzufügen ... Die Server-Nachricht ist nicht in der Lage, hier zum Client –

+0

Der Code hat viele ungenutzte Variablen, ich bin nur versucht, den Server zu sprechen zum Client hier .. der andere Code ist für etwas anderes .. Kann mir hier jemand helfen? –

Verwandte Themen