Express-Socket.IO 应用程序无法与我的 Azure WebApp 一起使用

Posted

技术标签:

【中文标题】Express-Socket.IO 应用程序无法与我的 Azure WebApp 一起使用【英文标题】:Express-Socket.IO App isn't working with my Azure WebApp 【发布时间】:2022-01-21 02:54:52 【问题描述】:

出于教育目的,我尝试部署一个使用 Socket.IO 的 Express 服务器。服务器应该能够提供使用 React 构建的静态 html 站点,并以“Hello Azure!”回答。每当我对 http://localhost:4000/api/azure 进行 GET Rest 调用以及新客户端连接到该站点时,所有其他客户端都会收到一条消息,宣布新客户端。

const path = require('path');
const express = require('express');
const app = express();
const server = require('http').createServer(app);
const io = require('socket.io')(server);
const router = require('./api/azure');

const PORT = process.env.PORT || 4000;

io.on('connection', () => 
    console.log('A new user has connected!')
    io.emit('broadcast', 'A new user has connected');
);

app.use(express.json());

app.use('/api/azure', router);

app.use(express.static(path.join(__dirname, 'build')));
app.use(express.static('public'));
app.use('/', (_, res) => 
    res.sendFile(path.join(__dirname, 'build', 'index.html'));
);


server.listen(PORT, () =>  
    console.log(`Listening to http://localhost:$PORT`); 
);

所有这些任务都在 localhost 中顺利完成。将此应用程序上传到我的 Azure WebApps 后,问题就开始了。

而不是传递消息“Hello Azure!”当我调用 https://mydomain.azurewebsites.net/api/azure 时,它会返回 HTML 文件。

用于轮询的典型 Socket.IO GET 方法 https://mydomain.azurewebsites.net/socket.io/?EIO=4&transport=polling&t=SomeString 也返回 HTML 文件。

我提供的所有 url 扩展名都会返回 HTML 文件。

我几乎不了解 WebApps 的基本知识。也许有一个我忘记的配置?顺便说一句,除了我在 WebApp 配置中启用了 Websockets 之外,我没有在配置中做任何事情。

这从未发生过。唯一的区别是,现在我使用免费层只是为了测试。会是这样吗?如果没有,我做错了什么?

感谢您的宝贵时间!

【问题讨论】:

【参考方案1】:

首先,尝试关闭 Web Socket 配置,因为它适用于与 Node.js websocket 实现相矛盾的 IIS 设置。

如果这没有帮助,请尝试强制传输层使用 Websockets 和 SSL。

io.configure(function() 
  // Force websocket
  io.set('transports', ['websocket']);

  // Force SSL
  io.set('match origin protocol', true);
);

此外,您不能在应用服务等服务上使用任意端口(在您的情况下为端口 4000)。您的应用将通过process.env.PORT 提供一个端口。因此,请确保您从日志消息中引用了正确的端口。您应该能够在日志流中看到这些。

另请注意,Azure 推出了一项名为 Web PubSub 的完全托管服务,以使用 Web Sockets 为您的应用程序提供动力。应用服务 Web 套接字实现不会水平扩展,而 Web PubSub 将在这方面为您提供帮助。 https://azure.microsoft.com/en-in/blog/easily-build-realtime-apps-with-websockets-and-azure-web-pubsub-now-in-preview/

【讨论】:

以上是关于Express-Socket.IO 应用程序无法与我的 Azure WebApp 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Socket.io 和 Express 进行集群

Apple ID 无法登录。错误:无法与帮助应用程序通信。 Xcode 7.1

无法从 Laravel 应用程序发送电子邮件:无法与主机 smtp.gmail.com 建立连接 [连接超时 #110]

nclam 防病毒软件无法与 .net 应用程序一起使用

无法定位程序输入点GetTickCount64与动态链接库KERNEL32.dll上

无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配