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有关。