2011-12-15 102 views
0

我想在c#中创建控制台应用程序,该应用程序将连接到本地推送服务器并将接收来自它的消息。如何使用将同时接收相同数据的线程?

我创建了能够读取从推送服务器响应通过使用下面的代码所做的“单”连接的应用程序:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://192.168.15.174/MvisumPushServer/PushServer.ashx?op=2&DeviceUniqueID=50211&ConnectionTimeout=30&ConnectionMechanism=Wifi&OSVersion=10&DeviceMake=Android&DeviceModel=sdk"); 

    HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
    Stream stream = null; 
    stream = response.GetResponseStream(); 
    StreamReader reader = new StreamReader(stream); 
    s = reader.ReadLine(); 
    Console.WriteLine(s); 

现在我想要做同样的事情,从单一的5间或更多的连接程序使用线程。 这些连接应该单独收到所有消息,并应显示给控制台。例如,如果从控制台上的推送服务器生成5个通知,则应该编写25条警报,即每个连接从推送服务器接收每条消息。我已经使用Lock(this)尝试过,但总共有5条警报显示在控制台上。

回答

0

如果重要,您的方法是关于定期开启的设备。这意味着如果要测试服务器,则必须使用计时器执行轮询。
只要您使用线程安全队列将响应排入队列,并将它们单独出队并将它们写入控制台,那么使用以特定或随机间隔已具有的代码调用例程的数组将完成此任务。此外,如果将DeviceUniqueID连接到每个定时器(具有相同长度的另一个数组),则此例程可以接受不同的DeviceUniqueID(作为参数)。

0

我怀疑问题实际上是锁。我怀疑某个线程正在获取锁,然后阻塞ReadLine,从而阻止其他线程进展。假设WriteLine是线程安全的,你应该可以在五个线程中执行你的代码,而不会出现任何问题。

0

这听起来不像你的线程方法是负责的问题。这听起来像你的服务器每个连接发送一个事件(5个连接),而不是每个连接5个事件。

相关问题