如何从不同的/另一个路线发射?
我使用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:
-
根本不要使用命名空间:
io.of('/voting_result').emit('getResult', {votingResult : result.data});
变
io.emit('getResult', {votingResult : result.data});
-
在客户端上定义一个名称空间,在服务器端使用:
var socket = io.connect('/voting_result');