2015-04-20 89 views
0

我想使用NodeJS实现服务器端推送功能。 现在,我要的是一个监听请求到特定的URL(例如http://localhost:8000/inputData?data=hello使用NodeJS服务器端推送

一旦这个请求,我想观看client.html所有客户端运行alert(hello);服务器。我所做的是下面的,在服务器端:

var app = require('http').createServer(handler), 
    io = require('socket.io').listen(app), 
    parser = new require('xml2json'), 
    fs = require('fs'), 
    url = require('url'); 



var qs = require('querystring'); 

app.listen(8000); 
console.log('server listening on localhost:8000'); 

function handler(req, res) { 
    var url_parts = url.parse(req.url, true); 
    var pathname = url_parts.pathname; 
    switch(pathname){ 
     case '/inputData': 
     var data = url_parts.query.data; 
     socket.emit('notifyData', data); //socket is undefined 
     break; 
     default: 
     fs.readFile(__dirname + '/client.html', function(err, data) { 
      if (err) { 
      console.log(err); 
      res.writeHead(500); 
      return res.end('Error loading client.html'); 
      } 
      res.writeHead(200); 
      res.end(data); 
     }); 
    } 

    ; 
} 

在客户端,在client.html

<script> 
    var socket = io.connect('http://localhost:8000'); 

    socket.on('notifyData', function (data) { 
     alert(data); 
    }); 
</script> 

我得到一个错误,说socket没有定义。我知道我应该早些定义它,但我不知道该怎么做。

这是否正确地解决此类问题?或者emit应该位于不同的文件中,例如inputData.html?我宁愿补充我已有的代码,因为我可能需要在var data= url_parts.query.data

+1

您是否在客户端包含了一个[reference](http://socket.io/download/)到socket.io? '' –

+0

是的我做过了' –

回答

1

你有一个设计问题,在您的服务器作为socket变量没有定义的。如果你正在尝试做的是广播到所有客户端,当任何一个点击特定的URL,那么你就可以做到这一点:

io.sockets.emit('notifyData', data); 

如果你想发出一个客户端插座,然后你将不得不找到一种方法来找出你试图发送到的io.sockets命名空间中的哪个套接字。

+0

准确地说,我想广播给所有客户端,当他们中的任何一个击中该URL。我用'io.sockets.emit('notifyData',data)'替换了'socket.emit('notifyData',data);'并且它工作正常。谢谢! –

0

之前进行一组操作。从docs看来,您似乎没有正确初始化服务器。

var app = require('http').createServer(handler) 
var io = require('socket.io')(app); 
var fs = require('fs'); 

app.listen(8000); 

/*...*/ 

io.on('connection', function (socket) { 
    socket.emit('notifyData', { hello: 'world' }); 
}); 

,并在客户端上,你应该有

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io('http://localhost:8000'); 
    socket.on('notifyData', function (data) { 
    alert(data); 
    }); 
</script> 
+0

我尝试用'io.on('connection',函数(套接字){socket.emit('notifyData',data);''替换socket.emit('notifyData',{hello:'world '}); });',我没有得到错误,但我仍然没有收到任何客户端.. –