2014-08-29 1 views
0

У меня есть самодостаточно signalr хаб, выполненный так:Как использовать signalr с некоторыми параллельными (фоновыми) процессами?

using System; 
using Microsoft.AspNet.SignalR; 
using Microsoft.Owin.Hosting; 
using Owin; 
using Microsoft.Owin.Cors; 

namespace SignalRSelfHost 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      // This will *ONLY* bind to localhost, if you want to bind to all addresses 
      // use http://*:8080 to bind to all addresses. 
      // See http://msdn.microsoft.com/en-us/library/system.net.httplistener.aspx 
      // for more information. 
      string url = "http://localhost:8080"; 
      using (WebApp.Start(url)) 
      { 
       Console.WriteLine("Server running on {0}", url); 
       Console.ReadLine(); 
      } 
     } 
    } 
    class Startup 
    { 
     public void Configuration(IAppBuilder app) 
     { 
      app.UseCors(CorsOptions.AllowAll); 
      app.MapSignalR(); 
     } 
    } 
    public class MyHub : Hub 
    { 
     ConcurrentDictionary<string, string[]> userList = new ConcurrentDictionary<string, string[]>(); 

     public void Send(string name, string message) 
     { 
      Clients.All.addMessage(name, message); 
     } 
    } 
}  

я какой-то процесс которым будет работать программа «навсегда»

CancellationTokenSource cts = new CancellationTokenSource(); 
var token = cts.Token; 

Task.Factory.StartNew(() => 
{ 
    while (true) 
    { 
     //update the userList wich should be shared with hub, and call some signalr notification on hub clients 
     Thread.Sleep(1000); 
    } 
}, token, TaskCreationOptions.LongRunning, TaskScheduler.Default); 

Я пытался поставить этот процесс в конструкторе хаба, но он не работал хорошо.

Итак, как достичь этого?

+0

Я бы вопрос мой сам, если опрос действительно является решением. В большинстве случаев агрегатор служебных автобусов/событий и т. Д. - то, что вы хотите – Anders

+0

У меня есть этот сервер, через сокет. Я просто могу запросить список пользователей. – iuristona

ответ

0

концентратор живет только во время запроса SignalR, так что вы не должны иметь такой код в хаб переместить его в фоновый рабочий и вызовите ступицу с помощью

GlobalHost.ConnectionManager.GetHubContext<MyHub>().Clients.All.addMessage(name, message);