【发布时间】:2020-07-17 10:42:10
【问题描述】:
我已经成功地使用 node.js 和 socket.io 同时实现了流式网络摄像头和聊天,我有一个为发起流的人提供的 emit.html 页面,以及一个为客户端或接收者提供的可视化.html 页面,但是我在将网络摄像头流附加到管理员创建的唯一房间时遇到了挑战,请问我怎样才能将网络摄像头仅发送到特定房间。 这是我下面的服务器代码
const express = require("express");
const app = new express();
const http = require("http").Server(app);
const io = require("socket.io")(http);
const formatMessage = require("./utils/messages");
const {
userJoin,
getCurrentUser,
userLeave,
getRoomUsers,
} = require("./utils/users");
const port = process.env.PORT || 3000;
app.use(express.static(__dirname + "/public"));
const botName = "Admin";
app.get("/", function (req, res) {
res.redirect("index.html");
});
io.on("connection", function (socket) {
socket.on("stream", function (image) {
socket.broadcast.emit("stream", image);
});
//Join Room
socket.on("joinRoom", ({ username, room }) => {
const user = userJoin(socket.id, username, room);
socket.join(user.room);
// Welcome current user
socket.emit("message", formatMessage(botName, "Welcome to Class!"));
// Broadcast when a user connects
socket.broadcast
.to(user.room)
.emit(
"message",
formatMessage(botName, `${user.username} has joined the class`)
);
// Send users and room info
io.to(user.room).emit("roomUsers", {
room: user.room,
users: getRoomUsers(user.room),
});
});
// Listen for chatMessage
socket.on("chatMessage", (msg) => {
const user = getCurrentUser(socket.id);
io.to(user.room).emit("message", formatMessage(user.username, msg));
});
// Runs when client disconnects
socket.on("disconnect", () => {
const user = userLeave(socket.id);
if (user) {
io.to(user.room).emit(
"message",
formatMessage(botName, `${user.username} has left the class`)
);
// Send users and room info
io.to(user.room).emit("roomUsers", {
room: user.room,
users: getRoomUsers(user.room),
});
}
});
});
http.listen(port, () => console.log(`Server running on port ${port}`));
请查看完整项目的 git 存储库,我不介意进行任何调整以使其更好。 https://github.com/timotech/screen-cast 谢谢
【问题讨论】: