gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 16:43:48 35 4
gpt4 key购买 nike

我正在构建使用 Express 框架和 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);
});
});

公共(public)文件夹内

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>

另一个页面.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 消息相同 来自。如果您想发送给任何收听的人,请改用 io.sockets.emit;或除 socket 外的所有 socket.broadcast.emit

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

关于javascript - 跨不同 Node.js 路由的 Socket.io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31537504/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com