Azure 上的 PeerJS 服务器 404

PeerJS Server 404 on Azure

我正在尝试在 Azure 上部署 PeerJS 服务器。在我的 kudu 控制台上,运行ning

node peerjs --port 9000

returns

Started PeerServer on ::, port: 9000, path: / (v. 0.2.8)

但是,当我尝试从我的客户端代码连接到服务器时,我收到 404。在我的浏览器中直接转到 appname.azurewebsites.net/peerjs/id也 returns 一个 404.

我在他们的 package.json 文件中看到,他们 运行

bin/peerjs --port ${PORT:=9000}

而不是直接传入9000;我假设这是一个环境变量。但是,尝试 运行 在 Azure 上执行此操作会得到

Error: Error: listen EACCES ${PORT:=9000}

我认为这意味着 Azure 无法将 ${PORT:=9000} 识别为有效端口。

我知道事实上我的客户端代码没有任何问题,因为 a) 我直接从 PeerJS 的网站复制它,并且 b) 当我将 PeerJS 部署到 Heroku 时一切正常。它只是不在 Azure 上 运行ning。

我尝试过的其他事情:我在 bin 文件夹中编辑 peerjs 以使用 process.env.PORT 而不是通过命令行传入的内容,但这没有用,给出了相同的 EACCES 错误。当我尝试 console.log(process.env.PORT) 时,我得到了未定义。 None 我的 Google 搜索找到了任何解决方案,尽管这个人 (Custom PeerJs Server giving ERR_CONNECTION_TIMED_OUT) 似乎有类似的错误,但不是在 Azure 上。

这可能是防火墙问题...您需要在 Azure 设置面板中打开端口 9000。

从机器本身,打开浏览器到 http://localhost:9000/ or http://localhost:9000/peerjs,您应该会看到标准的 Peerjs 服务器 JSON 输出。

或者如果您只有命令行,请尝试 curl http://localhost:9000/http://localhost:9000/peerjs

  1. Azure 应用服务不允许我们侦听客户端口。我们需要使用 process.env.PORT 来代替。见 .

  2. Azure 应用服务(在 Windows 平台上)运行 在 Microsoft IIS 上。所以我们需要将应用程序文件放到它的虚拟目录(D:\home\site\wwwroot),不再需要通过 Kudu 控制台手动 运行 应用程序。

在这种情况下,您首先需要将库安装在应用程序的根目录下:

npm install peer 

然后创建一个名为 index.jsapp.js 的文件,其中包含以下内容并将其放入 /wwwroot 文件夹:

var PeerServer = require('peer').PeerServer;
var server = PeerServer({port: process.env.PORT, path: '/'});

正如@Mikkel 在评论中提到的,PeerServer 使用 WebSocket 协议,因此 Web Sockets 应该像这样在 Azure 门户中启用:

您还需要查看 this post 为您的应用添加 web.config 文件(如果尚未创建)。