如何从不同的/另一个路线发射?

我使用express js&socket.io来构build我的简单应用程序。

所以,有一个使用PHP的网站“a”,会将一些数据发布到我的应用程序(使用快速js构build)。 在app.js中定义了2条路由,它们是:

  • / send_voting_result – >将接收来自网站“a”的POST数据
  • / voting_result – >将被用户访问&我想使其实时更新投票结果数据发布到/ send_voting_result

我在这里做的是:

app.js

var app = require('express')() , server = require('http').createServer(app) , io = require('socket.io').listen(server); ... // Receive POST data and do update the data to /voting_result route app.post('/send_voting_result', function(req, res){ var result = JSON.parse(req.body.kandidat); io.of('/voting_result').emit('getResult', {votingResult : result.data}); }); app.get('/voting_result', function(req, res){ res.render('voting_result', { title: 'Express', msg: 'This is Result page'}); }); 

voting_result.html

 <script src="/socket.io/socket.io.js"></script> <script> var socket = io.connect(); socket.on('getResult', function (data) { console.log("Message from server : "+data); }); </script> 

但是,这个脚本中的“发射”过程似乎不起作用:

 io.of('/voting_result').emit('getResult', {votingResult : result.data}); 

我无法检索发布到/ voting_result / send_voting_result中的数据

其实我是使用expressjs和socket.io的新手,所以我尽量通过参考一些相关教程来达到目的,但是还是不行。

有没有适当的方法来做到这一点?

提前致谢

您使用的io.of()方法不会引用访问网页的url。 它反而是指你在创build套接字时可以定义的名称空间:

 // Client-side var chat = io.connect('http://localhost/chat') // Server-side var chat = io .of('/chat') .on('connection', function (socket) { ... }) // will only apply to some connections 

这个特性被用来在一个WebSocket上复用多个数据stream,参见Socket.io的文档 ,将自己限制在一个名称空间中

那么你的问题有两个解决scheme:

  1. 根本不要使用命名空间:

     io.of('/voting_result').emit('getResult', {votingResult : result.data}); 

     io.emit('getResult', {votingResult : result.data}); 
  2. 在客户端上定义一个名称空间,在服务器端使用:

     var socket = io.connect('/voting_result');