准备用通过remoting或socket进行链接服务器程序,没有设计过,不知道并发如何处理,那位大侠指点一下,谢谢。

解决方案 »

  1.   

    ...最简单的用IIS +XML SERVER 看看好用不。
      

  2.   

    你是用Remoting还是Socket? 有多少个客户同时连接. 类似的服务器我做过几个,但很难拿出个例子来. 你说说要求,共同探讨吧.
      

  3.   

    用IIS肯定可以实现,关键是如果脱离了IIS,如何构造一个多线程并发服务程序的实现。
      

  4.   

    无论用Remoting或者Socket,客户端到服务器的访问就本身就是多线程的.
      

  5.   

    Socket的BeginXxx方法全部都是用完成端口去实现的.
    完成端口的细节你可以不需要考虑只要你尽量使用Socket.BeginXxx来编写Socket程序,就能让你的服务器程序达到最大的网络处理量.不过说起来,DotNet的Socket编程真的很费内存.
      

  6.   

    上下文并发处理,lz想写com+吧。弄多线程很容易啊
      

  7.   

    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Threading;
    using System.Runtime.Remoting.Contexts;[Synchronization()]
    class A: ContextBoundObject
    {
        public void Method1()
        {
            string threadName = Thread.CurrentThread.Name;
            Console.WriteLine(threadName + ": Method1 started");
            Thread.Sleep(3000);
            Console.WriteLine(threadName + ": Method1 finished");
        }
    }
    class Tests
    {
        A obj = new A();    public void ThreadMethod()
        {
            obj.Method1();
        }    static void Main(string[] args)
        {
            Tests test = new Tests();        //create and start a thread        Thread t1 = new Thread(new ThreadStart(test.ThreadMethod));
            t1.Name = "Thread 2";
            t1.Start();        //invoke Method1 with the main thread 
            Thread.CurrentThread.Name = "Thread 1";
            test.obj.Method1();
            t1.Join();    }
    }
      

  8.   

    window下建议使用iocp,自己查下资料。
      

  9.   

    http://blog.csdn.net/zhiang75/archive/2004/08/16/75915.aspx做个转贴工
      

  10.   

    说一些我自己做Socket服务器的体会:1. sokcet异步通讯时候最好不要手工产生线程,而要用.NET自身提供的异步通讯方式: 
    BeginXXX/EndXXX.它的好处是可最大限度地利用通讯硬件自己的线程和资源,而不是CPU上的线程.  比如用TcpClient类作异步读时,可以用TcpClient.GetStream().BeginRead, 并在它的CallBack函数中再次调用BeginRead,从而形成一个循环. 2. 线程对Server程序来说是非常昂贵的资源,尽量从设计的时候就少开线程,如果一个程序同时有二三百个线程,它即使不死性能也会很差. 楼主这个系统,如果服务器解析每个用户线程发来的消息时需要使用一些线程之间的共享资源和数据,为减少线程同步的开销和复杂性,可以考虑接到用户消息后马上抛到一个临时队列里,整个程序只用一个线程从队列中取出消息并解析.假如处理了客户端的信息后还需要向客户端返回信息,可以采用异步方式发送,这样一来服务器性能会好一些. 
    3.如果需要向控制端发送许多一模一样的信息而且控制端都在同一个网段里,可以考虑用UDP的MultiCast来减少点儿负担,前提是所在的网允许MultiCast.  
     
     
      

  11.   

    如果LZ准备用Remoting, 就可以省去许多Socket的底层操作,但也有它的局限,比如用Remoting传输一个很大的数据效率会差一点儿.用Remoting的时候需要根据业务需求,决定才用哪种方式: 是传简单的的ByValue的Object 还是传 MarshalByRefObject; 是用SingleCall还是Singleton; 如果后者用CAO Singleton还是SAO Singleton. 还有就是哪种Channel 和 Formatter, 其中 Tcp Channel + Binery Format是最快的.此外在Remoting里,看你如何用,还有不少细活儿,比如Life Time的管理,事件回调等等.