Yo lo que haria, para mantenerlo mas o menos simple es: 1) no hagas el query a la DB con cada request, hacelo cada N segundos maximo. (tener 10 ó 10000 clientes no va a afectar al SQL Server, solo al IIS)
2) para devolver los datos, mantene el resultado en cache si se puede... si no un usa un datareader y anda mandando al cliente (haciendo Flushes para evitar el buffer de ASP.NET) 3) que cada cliente tenga una "version" de la ultima info que recibio... asi cada vez que un cliente verifica por mas info sabes si hay info nueva para ese cliente o no.. La logica es la misma que la que usa HTTP con los caches del lado del cliente: se manda un request con un header "version actual: xxxx", y se devuelve 304 si esta es la ultima version, o un 200+(la info actualizada) si hay updates... 4) Idealmente, y dependiendo del tipo de informacion que manejes, podes mandar solo los cambios y no toda la informacion de nuevo... Si tu informacion tiene una secuencia (id numerico o timestamp), podes usar esto para enviar solo la informacion que no posee el cliente... Yo creo que con eso vas a poder soportar muchos usuarios sin problemas... En realidad muchas decisiones dependen de: - la cantidad de informacion que este mostrando - que tan seguido cambie la informacion en el server - cual es tu disponibilidad en el server de memoria, CPU e IO... de esto va a depender como manejes los caches, o si no usas si quiera. Si andas bien de memoria, pero limitado de los otros 2, usa cache. Si tenes poca memoria y te sobra CPU e IO, usa directamente un datareader asi no mantenes nada de info en el server... Con respecto a esto ultimo.. Yo tengo una app funcionando en produccion que hace streamming de toda una DB a clientes usando esta tecnica DataReader + ProtoBuf para la serializacion y funciona perfecto! =) Saludos!, Diego 2011/7/8 Dario Lega <[email protected]> > Gracias Ale, a estas alturas no descarto una solución alternativa con > WinForms, asi que voy a mirar un poco esto que me recomendas. > > Igual, si alguno sabe algo mas al respecto.... > > Saludos y gracias > > > El 8 de julio de 2011 17:45, <[email protected]> escribió: > > Hola Darío, yo alguna vez hice algo similar, pero utilizando .NET >> Remoting y clientes Windows. Era básicamente una implementación del patrón >> observer donde había un objeto remoto que se encargaba de consultar la base >> de datos cada 'X' tiempo y si detectaba cambios notificaba a los 'N' >> clientes subscriptos al objeto remoto (transparent_proxy). En ese caso el >> único objeto que iba contra la base era el objeto "vivo" del lado del >> servidor y generaba tráfico únicamente cuando había datos para actualizar. >> >> Si podes utilizar un cliente no web, esto te puede llegar a servir, no se >> me ocurre como se podría implementar algo similar en ASP.NET..... >> >> >> >> Saludos, Ale >> >> http://amiralles.com.ar >> >> >> >> > Hola, estoy con un problema y me gustaría si alguien tuvo una >> experiencia >> > similar me de una mano. >> > >> > Necesito una aplicación en lo posible Web, es decir, una pagina que >> > refresque datos en una grilla, cada N segundos (en principio 7seg), con >> > información que se puede ir actualizando paulatinamente en una Base de >> Datos >> > (SQL Server 2008). >> > >> > El gran problema, es que además esta pagina puede estar abierta en >> varias >> > pc´s, con lo cual, estamos incrementando mucho el uso de recursos del >> > Servidor IIS, llegando en ocasiones a colapsar, dado que además soporta >> > otras tareas. >> > >> > Tendría que ser una solución que me permita de forma mas eficiente solo >> > refrescar la pagina, cuando la info en la BD sea modificada. >> > >> > ¿Alguna recomendación por favor? >> > >> > >> Desde ya muchas gracias >> > >> > >
