2016-04-22 107 views
0

当用户进行GET /检查/健康时,该客户端应该与服务器通话并且服务器应该给客户端提供答案.. 但是,服务器发送的消息未在客户端..节点 - 充当网络服务器和客户端

客户端 - 也作为一个Web服务器

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/'"); 

服务器端:

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

问题需要独立的;不引用其他答案/问题。 –

+0

这在技术上是独立的,除了引用另一个问题的句子之外。这里有足够的代码来解决问题的答案。 – dvlsg

+0

我不知道为什么服务器的消息不在客户端上看到 –

回答

0

有许多这里潜在的问题,但马一个是你的服务器端代码缺少以下非常重要的一行:

http.listen(4000); 

并称,应该让你开始正确的道路。此外,我建议将http变量重命名为其他内容,因为它不是http模块。 server对我更有意义。

下面是您要做的更简单的示例。它缺少一些东西,比如错误处理,考虑到/check/health的请求进来,并且你的socket.io连接没有启动时会发生什么,等等,但是我会把它作为一个练习。我还修剪了一些与这个问题无关的东西(猫鼬,ejs模板等),所以当你确信这件作品按照预期工作时,你必须重新添加这些东西。


客户端

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'); 

服务器端

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('listen on *:4000'); }); –

+0

上面的代码存在于服务器端,我的错误是没有添加...服务器端的消息无法通过客户端 –

+0

代码中有很多未使用的变量,我只是试图让服务器通话客户在这里..其他代码是为了别的..有人可以帮我吗? –