2017-03-09 226 views
2

在服务器上创建一个集线器连接到SignalR服务器

public class SGHub : Hub 
{ 
    public static List<string> Users = new List<string>(); 

    public void Send(string name, string message) 
    { 
     Clients.All.broadcastMessage(name, message); 
     Console.WriteLine(SGHub.Users.Count); 
    } 
} 

在我连接到集线器

void Start() 
{ 
    hubConnection = new HubConnection(serverURL); 
    hubConnection.Error += HubConnectionError; 
    iHubProxy = hubConnection.CreateProxy("SGHub"); 
    Subscription subscription = iHubProxy.Subscribe("broadcastMessage"); 
    hubConnection.Start(); 
} 

如果服务器没有运行在客户端和客户端试图连接到Hub,应用程序挂起,如何避免这种情况?

+0

客户“挂”了多久?我也使用SignalR,并且我有客户端连接尝试在一个线程中以避免这种情况。如果你想要我,我可以发布我的代码。从未遇到过冻结应用程序的问题 –

+0

我运行客户端并尝试连接到未运行的集线器。 客户端在执行'hubConnection.Start();'后5-10秒没有响应,Windows提供关闭应用程序。 如果不难,请在代码中举个例子。 – zRirez

回答

0

你可以尝试启动与HTTP请求流serverURL

且仅当服务器返回,你开始signalr连接流。

0

我建议把你的客户端连接代码放在一个线程中。我就是这么做的。每次你有一个长时间运行的任务(比如在你的情况下等待超时),你在UI线程中这样做,应用程序将冻结。

+0

客户端在Unity 3D中,我不知道或者有可能在其中创建一个额外的线程。 – zRirez

+0

后端在C#中,不是吗?至少您展示的代码是C# –

+0

是的,后端在C#中 – zRirez