none
C# Socket网络编程转发器的问题 RRS feed

  • 问题

  • 我现在需要做一个socket转发器,转发程序接收到的是一个来自Asp.net server发来的一组请求(请求数组),转发器将这些请求拆分后放到不同的线程里(异步回调),发送到不同的服务器上(根据单个请求中的信息判定),待到有服务器的任务执行完成后,将请求返回到转发器中,转发器将结果回送到asp.server上。

    问题1:如何能够控制将一组请求拆分放到不同的线程中?

    问题2:如何能完成当一个服务器完成任务后回送结果至转发服务器后,转发服务器立即将结果回送至asp.net server,转发器不需要等待所有执行任务的服务器完成任务才回送结果?

    问题3:请问有没有类似的代码,可供参考?

     

    2011年6月2日 2:35

全部回复

  • 我现在需要做一个socket转发器,转发程序接收到的是一个来自Asp.net server发来的一组请求(请求数组),转发器将这些请求拆分后放到不同的线程里(异步回调),发送到不同的服务器上(根据单个请求中的信息判定),待到有服务器的任务执行完成后,将请求返回到转发器中,转发器将结果回送到asp.server上。

    问题1:如何能够控制将一组请求拆分放到不同的线程中?

    问题2:如何能完成当一个服务器完成任务后回送结果至转发服务器后,转发服务器立即将结果回送至asp.net server,转发器不需要等待所有执行任务的服务器完成任务才回送结果?

    问题3:请问有没有类似的代码,可供参考?

     


    自己顶下,转发的功能用异步回调做出来了。但是,如何将Web的一组请求,分配到不同的线程里呢?
    2011年6月2日 11:39
  • 你好,我想你可以考虑用一下线程池的技术,当一个Web请求的连接处于空闲时,为这个连接分配的线程资源会返还到线程池,可以供新的连接使用;当原来处于空闲的连接的客户发出新的请求,会从线程池里分配一个线程资源处理这个请求。 这种技术在连接处于空闲的机率较高、并发连接数目很多的场景下对于降低服务器的资源负载非常有效。

    有关线程池的介绍和使用,请参考下面两篇文章:

    http://www.cnblogs.com/shipfi/archive/2005/09/04/229899.html

    http://blog.csdn.net/wuqiubin/archive/2009/01/08/3732004.aspx

    希望对你有帮助。

    谢谢


    Jackie Sun [MSFT]
    如果您对我们的论坛在线支持服务有任何的意见或建议,请通过邮件告诉我们。 
    MSDN 论坛好帮手 立刻免费下载  MSDN 论坛好帮手



    2011年6月3日 4:51
    版主
  • Jackie,你好。谢谢你的答案。你提供的文章我已经看了。我想我的困惑在于转发器程序无法实时监控多个接收服务器的程序执行任务结果。这个如果用ManualResetEvent去做监控会阻塞转发器主线程(Listen()方法),所以有没有一种方法是这样的?转发器收到来自web服务器发来的请求后,将请求拆分放入线程池中,执行针对不同服务器的packet转发,线程阻塞等待Response,当不同服务器执行完自己的任务后,从线程中返回结果,线程撤销,转发器将结果回送致web服务器。
    2011年6月6日 15:09
  • Socket 的异步机制会把消息自动分发到线程池中,当接收完毕的时候会调一个 CallBack。 基本上可以满足你前面的需求。而且线程也不需要关系,线程池自动管理。

     

    至于针对不同的服务区转发,阻塞之类的,则需要自己写代码实现。


    学习学习....
    2011年6月7日 3:38