Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Web PubSub pour Socket.IO s’appuie sur la bibliothèque de Socket.IO. Lorsque vous utilisez le service Azure, les problèmes peuvent être liés au service ou à la bibliothèque.
Pour trouver l’origine des problèmes, vous pouvez isoler la bibliothèque de Socket.IO en supprimant temporairement Web PubSub pour Socket.IO de votre application. Si l’application fonctionne comme prévu après la suppression, la cause racine est probablement associée au service Azure.
Utilisez cet article pour trouver des solutions aux problèmes courants liés au service. En outre, vous pouvez activer la journalisation côté serveur pour examiner le comportement de votre application Socket.IO, si aucune des solutions répertoriées n’aide.
Si vous pensez que les problèmes sont liés à la bibliothèque Socket.IO, reportez-vous à la documentation de la bibliothèque Socket.IO.
Côté serveur
Importation incorrecte du package
Erreur possible
TypeError: (intermediate value).useAzureSocketIO is not a function
Origine
Si vous utilisez TypeScript dans votre projet, vous pouvez observer cette erreur. Cela est dû à une importation incorrecte du package.
// Bad example
import * as wpsExt from "@azure/web-pubsub-socket.io"
Si un package n’est pas utilisé ou référencé après l’importation, le comportement par défaut du compilateur TypeScript n’est pas d’émettre le package dans le fichier .js compilé.
Solution
Utilisez import "@azure/web-pubsub-socket.io"
à la place. Cette instruction d’importation force le compilateur TypeScript à inclure un package dans le fichier .js compilé, même si le package n’est référencé n’importe où dans le code source.
En savoir plus sur cette question fréquemment posée à partir de la communauté TypeScript.
// Good example.
// It forces TypeScript to include the package in compiled .js file.
import "@azure/web-pubsub-socket.io"
Côté client
Option de chemin d’accès incorrect
Erreur possible
GET <web-pubsub-endpoint>/socket.io/?EIO=4&transport=polling&t=OcmE4Ni
404 Introuvable
Origine
Le client Socket.IO a été créé sans option de path
correcte.
// Bad example
const socket = io(endpoint)
Solution
Ajoutez l’option de path
correcte avec la valeur /clients/socketio/hubs/eio_hub
.
// Good example
const socket = io(endpoint, {
path: "/clients/socketio/hubs/eio_hub",
});
Incorrect Web PubSub pour Socket.IO point de terminaison
Erreur possible
GET <non-web-pubsub-endpoint>/socket.io/?EIO=4&transport=polling&t=OcmE4Ni
404 Introuvable
Origine
Le client Socket.IO a été créé sans un bon web PubSub pour Socket.IO point de terminaison. Par exemple :
// 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>",
});
Lorsque vous utilisez Web PubSub pour Socket.IO, vos clients établissent des connexions avec un service Azure. Lorsque vous créez un client Socket.IO, vous devez utiliser le point de terminaison de votre web PubSub pour Socket.IO ressource.
Solution
Laissez Socket.IO client utiliser le point de terminaison de votre web PubSub pour Socket.IO ressource.
// Good example.
const webPubSubEndpoint = "<web-pubsub-endpoint>";
const socket = io(webPubSubEndpoint, {
path: "/clients/socketio/hubs/<Your hub name>",
});
Installé plusieurs versions pour le même package
Erreur possible
Le serveur lève l’erreur :
const io = await require('socket.io')(server).useAzureSocketIO(wpsOptions);
^
TypeError: require(...)(...).useAzureSocketIO is not a function
Origine
Un package socket.io
ou engine.io
est ajouté à package.json
sous le champ dépendances par l’utilisateur, tandis que le package sdk @azure/web-pubsub-socket.io
spécifie une autre version en interne. Par exemple :
"dependencies": {
"@azure/web-pubsub-socket.io": "1.0.1-beta.6",
"socket.io": "4.6.1"
},
Après yarn install
, les deux versions différentes sont installées. Vous pouvez vérifier en exécutant npm list socket.io
.
Cette commande doit afficher deux versions de packages 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
Solution
La solution dépend de la nécessité ou non d’une version personnalisée de socket.io
ou de package engine.io
.
- La version personnalisée du package
socket.io
/engine.io
n’est pas nécessaire Simplement la suppression desocket.io
/engine.io
danspackage.json
dépendances fonctionne. Par exemple :
"dependencies": {
"@azure/web-pubsub-socket.io": "1.0.1-beta.6",
},
- La version personnalisée du package
socket.io
/engine.io
est nécessaire Dans ce cas,package.json
peut être :
"dependencies": {
"@azure/web-pubsub-socket.io": "1.0.1-beta.6",
"socket.io": "4.6.1"
},
Ensuite, vous devez exécuter yarn install --flat
. Il installe toutes les dépendances, mais autorise une seule version pour chaque package. Lors de la première exécution, il vous invite à choisir une version unique pour chaque package qui dépend de plusieurs plages de versions.
Pour notre cas, il peut vous inviter à choisir des versions de socket.io
, engine.io
, engine.io-parser
et peut-être plus encore. Assurez-vous que leurs versions sont mises en correspondance les unes avec les autres en fonction de l’implémentation native de socket.io
package et engine.io
package.
Les versions finales sont ajoutées à votre « package.json » sous un champ de résolution.
"resolutions": {
"package-a": "a.b.c",
"package-b": "d.e.f",
"package-c": "g.h.i"
}