我正在尝试像C#(性能原因)那样复制客户端浏览器之类的行为。我想要实现的目标是,对于收到的每个新事件,我的程序应该触发服务器端(Hub),然后通知客户端。有一种方法可以将它作为触发器/检测器处理,以便一旦检测到消息然后执行Hub方法,而不是每次都有重复命中hub方法的while循环。希望这是有道理的
以下客户端代码快照:
IHubProxy _hub;
string url = @"http://localhost:8080/";
var connection = new HubConnection(url);
_hub = connection.CreateHubProxy("PersonHub");
connection.Start().Wait();
//client side method
_hub.On("checkedIn", x => Console.WriteLine(x));
Console.WriteLine("Enter Person Name");
var answer = Console.ReadLine();
while (true) // Better way doing this? trigger or detect new message?
{
//server side method
_hub.Invoke("GetByName", answer).Wait();
}
以下Hub代码快照:
[HubName("PersonHub")]
public class PersonHub: Hub
{
public Person GetByName(string name)
{
//logic and etc ...
Clients.All.checkedIn(name);
}
}
通过将while循环设置为true,这意味着它将始终调用我不想要的服务器端方法(Hub方法)。如果触发了新事件,则应该使用hub方法。有没有办法以某种方式监听新消息,但如果没有检测到消息则不执行?
答案 0 :(得分:0)
可能的解决方案是:
string line;
while ((line = Console.ReadLine()) != "exit")
{
_hub.Invoke("GetByName", line).Wait();
}