Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Web PubSub для Socket.IO строится на библиотеке Socket.IO. При использовании службы Azure могут возникнуть проблемы со службой или библиотекой.
Чтобы найти источник проблем, можно изолировать библиотеку Socket.IO, временно удалив Web PubSub для Socket.IO из приложения. Если приложение работает должным образом после удаления, первопричина, вероятно, связана со службой Azure.
Используйте эту статью, чтобы найти решения распространенных проблем со службой. Кроме того, вы можете включить ведение журнала на стороне сервера, чтобы проверить поведение приложения Socket.IO, если ни одна из перечисленных решений не поможет.
Если вы подозреваете, что проблемы с библиотекой Socket.IO, обратитесь к документации Socket.IO библиотеки.
На стороне сервера
Неправильный импорт пакета
Возможная ошибка
TypeError: (intermediate value).useAzureSocketIO is not a function
Основная причина
При использовании TypeScript в проекте может возникнуть эта ошибка. Это связано с неправильным импортом пакетов.
// Bad example
import * as wpsExt from "@azure/web-pubsub-socket.io"
Если пакет не используется или не ссылается после импорта, поведение компилятора TypeScript по умолчанию не выдает пакет в скомпилированном файле .js .
Решение
Вместо этого используйте import "@azure/web-pubsub-socket.io"
. Эта инструкция импорта заставляет компилятор TypeScript включать пакет в скомпилированный файл .js , даже если пакет не ссылается нигде в исходном коде.
Дополнительные сведения об этом часто задаваемых вопросе из сообщества TypeScript.
// Good example.
// It forces TypeScript to include the package in compiled .js file.
import "@azure/web-pubsub-socket.io"
На стороне клиента
Неправильный вариант пути
Возможная ошибка
GET <web-pubsub-endpoint>/socket.io/?EIO=4&transport=polling&t=OcmE4Ni
404 Не найдено
Основная причина
Клиент Socket.IO был создан без правильного path
параметра.
// Bad example
const socket = io(endpoint)
Решение
Добавьте правильный path
параметр со значением /clients/socketio/hubs/eio_hub
.
// Good example
const socket = io(endpoint, {
path: "/clients/socketio/hubs/eio_hub",
});
Неверный web PubSub для конечной точки Socket.IO
Возможная ошибка
GET <non-web-pubsub-endpoint>/socket.io/?EIO=4&transport=polling&t=OcmE4Ni
404 Не найдено
Основная причина
Клиент Socket.IO был создан без правильной веб-pubSub для конечной точки Socket.IO. Например:
// Bad example.
// This example uses the original Socket.IO server endpoint.
const endpoint = "socketio-server.com";
const socket = io(endpoint, {
path: "/clients/socketio/hubs/<Your hub name>",
});
При использовании Web PubSub для Socket.IO клиенты устанавливают подключения к службе Azure. При создании клиента Socket.IO необходимо использовать конечную точку для веб-pubSub для ресурса Socket.IO.
Решение
Позвольте клиенту Socket.IO использовать конечную точку для веб-pubSub для Socket.IO ресурса.
// Good example.
const webPubSubEndpoint = "<web-pubsub-endpoint>";
const socket = io(webPubSubEndpoint, {
path: "/clients/socketio/hubs/<Your hub name>",
});
Установка нескольких версий для одного пакета
Возможная ошибка
Сервер выдает ошибку:
const io = await require('socket.io')(server).useAzureSocketIO(wpsOptions);
^
TypeError: require(...)(...).useAzureSocketIO is not a function
Основная причина
Пакет socket.io
или engine.io
пакет добавляется package.json
в поле зависимостей пользователем, а пакет @azure/web-pubsub-socket.io
SDK задает другую версию внутри пользователя. Например:
"dependencies": {
"@azure/web-pubsub-socket.io": "1.0.1-beta.6",
"socket.io": "4.6.1"
},
После yarn install
установки обеих разных версий. Вы можете проверить, выполнив команду npm list socket.io
.
Эта команда должна отображать две версии socket.io
пакетов:
demo@0.0.0 G:\demo
├─┬ @azure/web-pubsub-socket.io@1.0.0-beta.6
│ └── socket.io@4.7.1
└── socket.io@4.6.1
Решение
Решение зависит от того, нужна ли настраиваемая версия socket.io
или engine.io
пакет.
- Настраиваемая версия
socket.io
/engine.io
пакета не требуется просто удалить/socket.io
engine.io
вpackage.json
зависимостях. Например:
"dependencies": {
"@azure/web-pubsub-socket.io": "1.0.1-beta.6",
},
- Настраиваемая версия
socket.io
/engine.io
пакета необходима в этом случае:package.json
"dependencies": {
"@azure/web-pubsub-socket.io": "1.0.1-beta.6",
"socket.io": "4.6.1"
},
Затем следует запустить yarn install --flat
. Он устанавливает все зависимости, но разрешает только одну версию для каждого пакета. При первом запуске будет предложено выбрать одну версию для каждого пакета, зависящую от нескольких диапазонов версий.
В нашем случае это может предложить вам выбрать версии socket.io
, engine.io
engine.io-parser
и, возможно, больше. Убедитесь, что их версии совпадают друг с другом в соответствии с собственной реализацией socket.io
пакета и engine.io
пакета.
Окончательные версии добавляются в поле "package.json".
"resolutions": {
"package-a": "a.b.c",
"package-b": "d.e.f",
"package-c": "g.h.i"
}