Я пытаюсь настроить socket.io с моим Node.js сервером в службах приложения Azure. Он отлично работает на моем локальном сервере. Тем не менее, я не могу заставить его работать на Azure.
Я включил веб-сокеты в моих Azure Службах приложений -> Конфигурация -> Общие настройки. Однако это не работает.
Я следовал инструкциям в этом сообщении: Socket IO net :: ERR_CONNECTION_REFUSED , но у меня это не сработало.
Мой код на стороне сервера:
...
const port = process.env.PORT || 5000;
const app: Application = express();
const server = require("http").Server(app);
const io = require("socket.io")(server);
...
io.of("/chat").on("connection", async function(socket: any) {
console.log('hi')
});
...
server.listen(port, () => console.log(`listening on port ${port} `));
Мои настройки CORS также были настроены надлежащим образом, HTTP-запросы к моему серверу работают нормально, а также запросы, требующие учетных данных.
Любая помощь будет оценена. Спасибо
РЕДАКТИРОВАТЬ (ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ):
Я использую внутреннюю аутентификацию. Из-за этого мне нужно установить для заголовка Access-Control-Allow-Credentials значение TRUE. Мое приложение express устанавливало это значение true через модуль cors npm, однако, что бы я ни делал, я не мог заставить работать HTTP-запросы при выполнении запросов аутентификации.
Я смог решить эту проблему, выполнив:
az resource update --name web --resource-group <myResourceGroupName> --namespace Microsoft.Web --resource-type config --parent sites/<site-name> --set properties.cors.supportCredentials=“true” --api-version 2015-06-01
, который я нашел здесь: (https://docs.microsoft.com/bs-latn-ba/azure/app-service/app-service-web-tutorial-rest-api)
Это позволило HTTP-запросы с учетными данными для работы, а также любые другие запросы HTTP. Важно отметить, что в моих настройках Azure все мои настройки CORS по-прежнему пусто , чтобы мое приложение express могло обрабатывать CORS.
Не уверен, что это связано ...
EDIT2:
, когда я пытаюсь подключиться с моего клиента с
const socketIo = io(socketUrl + "/chat", {
// transports: ["websocket"]
upgrade: false,
})
все работает нормально , Но если я раскомментирую transports: ["websocket"]
, соединение не будет установлено. Это как-то связано с настройками websocket в Azure