J'ai un petit projet SignalR que j'ai commencé et qu'il ne fait pour l'instant que de recevoir une chaîne et de la renvoyer à tous les utilisateurs connectés.

Ce que je me demande, c'est que, puisque SignalR ouvre les Websockets sur mon serveur - comment puis-je me connecter au service en utilisant le code javascript des Websockets standard? (J'ai une raison de vouloir le faire de cette façon sans la bibliothèque SignalR).

J'ai regardé en utilisant les outils de développement Chrome et j'ai trouvé que l'adresse à laquelle le navigateur se connecte est:

ws://localhost:53675/signalr/connect?transport=webSockets&clientProtocol=1.4&connectionToken=YKgNxA6dhmtHya1srzPPIv6KFIYEjLTFOogXqcjPErFcKCmRdjvS2X6A2KmraW%2BrLnRUNf68gYPdOkOOgJ8yRcq4iCDm%2BbUyLejsr2NySNZBvLloWuMIAvgI6oC%2Fyt%2Ba&connectionData=%5B%7B%22name%22%3A%22ophirhubtest%22%7D%5D&tid=7

Comment générer le jeton?

Ensuite, il semble que les messages passant entre le client et le serveur ne soient que du texte au format json ordinaire (qui sera facile à imiter):

{"C":"d-9E7D682A-A,1|E,0|F,1|G,0","S":1,"M":[]}
{"H":"ophirhubtest","M":"Echo","A":["test"],"I":0}
{"C":"d-9E7D682A-A,2|E,0|F,1|G,0","M":[{"H":"ophirHubTest","M":"printEcho","A":["You said: test"]}]}

Si j'essaie juste de me connecter, il se connecte mais la connexion est rapidement fermée. Si je retire le jeton, il se ferme immédiatement.

Est-il possible de se connecter au WS "manuellement"?

8
developer82 21 juil. 2015 à 17:55

2 réponses

Meilleure réponse

Avant de pouvoir vous connecter au serveur, une négociation de connexion est en cours. C'est à ce moment que le serveur envoie toutes les données nécessaires pour envoyer et recevoir des messages. Sans négociation de connexion, vous ne pourrez pas vous connecter au serveur. Une fois que vous implémentez la négociation de connexion, vous serez probablement à moitié implémenté un client SignalR. J'ai écrit un article de blog décrivant le protocole SignalR qui devrait vous aider à comprendre comment les choses fonctionnent en dessous et pourquoi la connexion au serveur avec votre propre websocket n'est pas simple (ou simplement impossible si vous ne suivez pas le protocole SignalR ).

MODIFIER

La version ASP.NET Core de SignalR permet désormais de se connecter au serveur avec webSocket nu.

5
Pawel 10 nov. 2017 à 17:05

Je veux juste ajouter qu'il est possible de se connecter à la version ASP.NET Core de SignalR avec websocket mais vous devez ajouter le caractère magique 30 à la fin de chaque appel que vous passez

const endChar = String.fromCharCode(30);
socket.send(`{"arguments":["arg1"],"streamIds":[],"target":"TestMethod","type":1}${endChar}`);
1
Frédéric Thibault 29 janv. 2020 à 13:40