对等CLI有效,但ExpressPeerServer无效

问题描述

我正在尝试建立一个快速的peerJs服务器并通过HTTPS在本地运行。现在,如果我通过CLI启动peerJS服务器,那么我可以很好地连接到它,并且一切正常,但是一旦尝试通过脚本运行peerJS服务器,我就无法连接到它。我在控制台中遇到net::ERR_CONNECTION_REFUSED错误

工作代码

-server.js

const fs = require('fs');
const express = require('express');
const app = express();
const server = require('https').Server(
  { key: fs.readFileSync('vuekey.pem'),cert: fs.readFileSync('vuecert.pem') },app
);
const io = require('socket.io')(server);
const { v4: uuidV4 } = require('uuid');

app.set('view engine','ejs');
app.use(express.static('public'));

app.get('/',(req,res) => {
  res.redirect(`/${uuidV4()}`);
});

app.get('/:room',res) => {
  res.render('room',{ roomId: req.params.room });
});

io.on('connection',(socket) => {
  socket.on('join-room',(roomId,userId) => {
    socket.join(roomId);
    socket.to(roomId).broadcast.emit('user-connected',userId);

    socket.on('disconnect',() => {
      socket.to(roomId).broadcast.emit('user-disconnected',userId);
    });
  });
});

server.listen(3000);

-client.js

const myPeer = new Peer(undefined,{
  host: '/',port: '3001',});

我首先运行peerjs --port 3001 --sslkey'E:\ myPath \ vuekey.pem'--sslcert'E:\ myPath \ vuecert.pem'手动启动PeerJS服务器。这一切都很好,我没有问题。但是我想让PeerJS服务器作为我的主服务器脚本的一部分运行。所以我用ExpresspeerServer来做。因此,在我的 server.js 文件中,添加了以下代码,但这就是抛出控制台错误的时候了。

const { ExpresspeerServer } = require('peer');
const peerServer = ExpresspeerServer(server,{
  debug: true,ssl: {
    key: fs.readFileSync('vuekey.pem'),cert: fs.readFileSync('vuecert.pem'),},});

app.use('/peerjs',peerServer);

PeerJS CLI与我的server.js代码有何不同?我该如何解决

解决方法

我终于弄清楚了。 Express服务器和对等服务器位于单独的端口中,我需要在Peer对象中添加path参数。

-server.js

const peerServer = ExpressPeerServer(server,{
  debug: true,port: '3000',ssl: {
    key: fs.readFileSync('vuekey.pem'),cert: fs.readFileSync('vuecert.pem'),},});

-client.js

const myPeer = new Peer(undefined,{
  host: '/',// This will force the localhost/IP of the machine
  path: '/peerjs',// Path that was specified in the server.js file for the peerServer's app.use() method.
  port: '3000',// This needs to be the same port as specified in the server.js
});

进行这些较小的更改后,所有内容都可以通过HTTPS正常运行

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...