Bonjour à tous,

SignalR existe depuis un bon petit moment, et j'ai lu une bonne poignée de tutos et articles à son sujet.
La grosse phrase d'accroche que l'on retrouve généralement, c'est "dynamisez vos pages web avec SignalR", et en gros, le polling côté client, c'est has been, il faut push, c'est bien plus chouette (bon, sauf si votre navigateur est vieux, et qu'il supporte pas les websockets ou autre techno récente, auquel cas, on va retourner sur un bon vieux polling ajax, mais vous le verrez pas SignalR s'en occupe pour vous...)

Toutefois, la majorité des exemples donnés sont des applications de chat pour montrer que l'on peut broadcast des messages à des utilisateurs, ou groupes d'utilisateurs directement depuis le serveur, sans avoir recours à du polling depuis chaque client.

C'est chouette, mais ça me laisse un peu sur ma faim.

Prenons un autre cas d'utilisation.

J'ai une base de donnée alimentée en temps réel, contenant, par exemple, la liste des taches à effectuer par les lutins du père noël (c'est presque de saison).
Chaque lutin a sa propre liste de tache. Le père noël fait le dispatch. Chaque lutin doit donc voir, sa liste de tache, et que cette liste soit mise à jour automatiquement quand le vieux barbu en rajoute.
Evidemment, le père noël est un geek, et il nourrit la base de données manuellement, en écrivant ses requêtes sql d'insert à la main.

Bref, pour aider nos lutins, on leur fait une jolie page web, à laquelle ils vont se connecter avec leur login et password, et magie du web, on leur affiche leur super liste de tache.

Actuellement, Jean Edmond, dev à l'ancienne dans sa SSII super humaine, a fait super simple. Une requete ajax à laquelle on passe l'id du lutin connecté, qui poll le serveur toutes les X secondes, et refresh de la liste des messages à afficher.
Et ça marche correctement.

Mais hop, la mère noël, ayant lu plein d'articles sur le net, veut absolument qu'on soit à la pointe de la technologie, et que Jean Edmond utilise SignalR.

Et là, c'est le drame, J-E se pose plein de questions.

- Ok, j'ai lu plein de tutos, et à chaque fois, c'est un client qui clique sur send pour envoyer un message, le serveur le reçoit, et broadcast le message à tous les users. Mais dans mon cas, j'ai pas d'interaction client. Quand le lutin se connecte, il voit sa liste, et celle ci se met à jour toutes les X secondes. Je fais comment moi ?
- Et puis, c'est chouette que ça broadcast à tous les users, mais je veux que les taches qui appartiennent à mon lutin. Je fais comment pour que le serveur lui envoie les infos qu'à lui et pas aux autres ?
- Au final, je sens que je vais devoir démarrer un thread côté serveur lors de la première connexion qui va, à l'aide d'un timer, aller poller la base, et me retourner la liste des nouveaux messages. Mais c'est super moche en fait. Et ça va charger le serveur, alors qu'avant, je faisais ça côté client, et le serveur n'avait qu'à traiter mes requêtes entrantes, sans avoir à maintenir une tripotée de threads (enfin, 1 pour chaque client connecté). En gros, je déporte le polling du côté client vers le côté serveur. Je vois pas vraiment l'avantage.

Bref, à travers ce cas d'utilisation, je me demande si j'essaye de visser un écrou avec un marteau (bref, SignalR, c'est pas fait pour ça), ou si je n'ai pas encore compris comment utiliser le tournevis (SignalR, c'est fait pour ça, mais aucun tuto n'explique même en gros comment faire).

Si quelqu'un se sent l'âme pédagogue (ou a un bon article à conseiller), je l'en remercie par avance.