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 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
Apple ID 无法登录。错误:无法与帮助应用程序通信。 Xcode 7.1
无法从 Laravel 应用程序发送电子邮件:无法与主机 smtp.gmail.com 建立连接 [连接超时 #110]