Eu usei SignalR
para obter a funcionalidade de mensagens em tempo real em vários dos meus projetos. Parece funcionar de forma confiável e é muito fácil aprender a usar.
A tentação, pelo menos para mim, é abandonar o desenvolvimento de um serviço de API da Web e usar SignalR
para tudo.
Eu sinto que isso poderia ser alcançado por um design cuidadoso e, se fosse, significaria muito menos código de cliente seria necessário. Mais importante, isso significaria que haveria uma interface única para os serviços, em vez de uma interface dividida, e, na pior das hipóteses, alguém poderia ligar isso sem pensar em quando as coisas seriam renderizadas etc.
Então, eu gostaria de saber:
- Existe algum outro motivo para não usar o SignalR em vez de todos os serviços da web, além do desempenho?
- O desempenho do SignalR é suficientemente preocupante para que não faria sentido fazê-lo?
Tem sido um sonho meu ser capaz de converter definições de objeto e serviço do lado do servidor em código de acesso de serviço do lado do cliente sem algo parecido node.js
. Por exemplo, se eu definir um objeto interessante InterestingObject
e um serviço para CRUD
o objeto InterestingObjectService
, posso definir uma rota de URL padrão para o serviço - por exemplo, "/ {serviceName} / {methodName}" - mas ainda preciso escrever o código do cliente para acessar o serviço. Como o objeto será passado do cliente para o servidor e vice-versa, não há razão prática para terpara definir o objeto explicitamente no código do lado do cliente, nem deve ser necessário definir explicitamente as rotas para executar operações CRUD. Eu sinto que deveria haver uma maneira de padronizar tudo isso, para que seja possível gravar um cliente com a suposição de que o acesso ao serviço funcione do cliente para o servidor e retorne de forma tão transparente quanto faria se eu estivesse escrevendo um WinForms ou Java Applet ou aplicativo nativo ou o que você tem.
Se o SignalR for bom o suficiente para ser usado no lugar de um serviço da web tradicional, pode ser uma maneira viável de conseguir isso. O SignalR já inclui funcionalidade para fazer o hub funcionar como o serviço que eu descrevo, para que eu possa definir um serviço de base comum (CRUD) que ofereça toda essa funcionalidade pronta para uso com alguma reflexão. Então, eu quase tive como garantido o acesso ao serviço, poupando-me do incômodo de reescrever código para acessar algo que poderia ser acessado por convenção - e, mais importante, o tempo que eu precisaria gastar escrevendo código para definir como isso é atualizado em o DOM.
Depois de ler minha edição, sinto que pode ser um pouco absurdo, então fique à vontade para me perguntar se você tem perguntas sobre o que estou falando. Basicamente, quero que o acesso ao serviço seja o mais transparente possível.