2012-03-05 140 views
0

我有一个TCP套接字应用程序,客户端在同一时间向服务器发送巨大的字符串消息。服务器将此消息写入Access DB.So如果有这么多的客户端服务器端可以不能正确处理每个客户端,并且有时会关闭服务器。我想问一下,有没有什么方法可以在发送消息等待队列之前告诉客户端的线程,如果有另一个客户端当前在队列中。这个服务器不需要同时处理例如30个客户端的需求。C#Socket编程中的线程管理

例如;

  1. 客户端发送消息=>服务器处理1个客户端的需求
  2. 客户端在等待1个客户端的完整比2客户端要求发送消息=>服务器处理1个客户端的需求
  3. 客户端在等待2客户端的需求为完整......

我使用Access数据库时出现问题。虽然打开访问连接将数据保存到表和关闭数据库是花费时间和服务器去haywire :)如果我不使用访问数据库我可以得到巨大的消息没有问题。

回答

0

我认为你应该考虑为你的应用程序使用Web服务器,并用HTTP代替你的协议。不要在TCP流上发送大量字符串,只需使用您最喜欢的HttpClient类将字符串发送到服务器即可。

通过转移到HTTP,您或多或少地解决了所有性能问题。 Web服务器已经知道如何处理多个长请求,所以你不必担心这一点。由于您发送大字符串,HTTP开销不会影响您的性能。

+0

我的问题是不是巨大的strings.If我不写进来的字符串消息到Access数据库没有problem.Problem是,当我使用Access数据库出现。当打开访问连接将数据保存到表和关闭数据库需要时间和服务器就会失控:) – 2012-03-05 21:00:12

+0

如果你不使用成熟的Web应用程序服务器(如IIS和ASP.NET)。所有这些已经为你解决了。 – zmbq 2012-03-05 21:19:22

3

是的,你可以做到这一点,但这不是最有效的方法。你的方案是单线程的。

你想要做的是创建一个线程池,并接受来自多个客户端的消息和处理它们作为单独的线程。 如果这太复杂。你可以在你的服务器中有一个生产者消费者队列,所有传入的消息将被存储在一个队列中,而你的服务器将以先到先得的方式处理它们。