繁体   English   中英

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

[英]Socket.io across different Node.js routes

我正在构建使用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 ,服务器上的socket.emit将仅向一个客户端发送return message ,与从其接收send message客户端相同。 如果要发送给正在收听的任何人,请使用io.sockets.emit代替; 或除具有socket.broadcast.emit socket以外的所有socket

基本上,您想知道为什么其他人无法窃听私人对话。 :)与Express路由无关,而与socket.io API有关。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM