Socket.io跨越不同的Node.js路由

我正在构build使用Express Framework以及Socket.io的简单Node.js应用程序。 不过,我试图通过不同的快速路线从服务器接收消息。 有没有办法通过服务器接收从一个路由发送到另一个路由的消息? 我已经给了我的代码非常简化的版本如下:

app.js

var express = require("express"), app = express(), http = require("http").createServer(app), fs = require("fs"), io = require("socket.io").listen(http); //Create a server var port = 9001; http.listen(port, function() { console.log("Server is running on port " + port); }); //Set up routes var anotherPage = express.Router(); anotherPage.route('/') .get(function(req, res, next) { res.sendFile('/AnotherPage.html', {root: './public'}); }); var someOtherPage = express.Router(); someOtherPage.route('/') .get(function(req, res, next) { res.sendFile('/SomeOtherPage.html', {root: './public'}); }); //Set up static directories app.use(express.static(__dirname + "/public")) .use('/anotherpage', anotherPage) .use('/someotherpage', someOtherPage); io.sockets.on("connection", function(socket) { socket.on("send message", function(data) { socket.emit('return message', data); }); }); 

公用文件夹内

AnotherPage.html

 <!DOCTYPE html> <html> <head> <title>Sender</title> <script type="text/javascript" src="/socket.io/socket.io.js"></script> <script src="/anotherPage.js"></script> </head> <body> <input id="input" type="text" /> <button onclick="sendMessage()">Submit</button> </body> </html> 

anotherPage.js

 var socket = io.connect(); function sendMessage() { socket.emit("send message", document.getElementById('input').value ); } socket.on('return message', function(data){ //Working console.log(data); }); 

SomeOtherPage.html

 <!DOCTYPE html> <html> <head> <title>Receiver</title> <script type="text/javascript" src="/socket.io/socket.io.js"></script> <script src="/someOtherPage.js"></script> </head> <body> //TODO </body> </html> 

someOtherPage.js

 var socket = io.connect(); socket.on('return message', function(data){ //Not working console.log(data); }); 

正如我在评论中所说的,服务器上的socket.emit将只向一个客户端发送return message ,与接收到的send message 。 如果你想发送给任何人听,请使用io.sockets.emit ; 或者使用socket.broadcast.emit除了socket之外的所有socket.broadcast.emit

基本上,你想知道为什么别人不能偷听私人谈话。 :)它与Express路由无关,并与socket.io API有关。