一台WEB服务器,还有一台服务器A.WEB服务器上的WEB网站项目,有一个页面test.aspx,打算在该页面中使用socket的TCP/IP与服务器A进行同步通讯。
与服务器A进行通讯可以建立长连接。有指定的IP和端口。
但这个页面test.aspx是有可能多人同时访问的。这种方案行得通么?

解决方案 »

  1.   

    行的通    但要看你的网络速度如何了。
    如果你的web和服务器A通讯很慢   那你的网站运行效率就慢了。
      

  2.   

    可以activex sl flash
      

  3.   


    这首先要明确概念,否则根本无法与懂得实现这些功能的技术人员沟通,就更不用谈方案“行得通”了。比如说“在该页面中”这个概念,是指的在浏览器上的那个阶段看到的暂时页面呢?还是在asp.net程序中Page对象从创建到输出html之后立即销毁这个短暂的瞬间呢?分别在这两个概念实现之中,你的socket又怎样存在呢?我想你的这个设计还无法用于评估所要做的工作、时间、成本,因为技术上还说不清楚概念。
      

  4.   

    该页面test.aspx其实也是作为一个公共访问的接口页面。其作用是:用于其他外部服务器通过URL地址调用来访问test.aspx,test.aspx再与服务器A进行TCP/IP通讯发送/接收数据。最后把
    收到的数据以response.write的形式输出来。应该来说test.aspx的工作都在page_load事件中完成的。
      

  5.   

    服务器允许长连接,这是确认的.
    但就看test.aspx页面在多人同时访问时, 会不会出问题呢.
    我想的是,在WEB网站项目中,建一个全局的ClientSocket,一直与服务器A保持连接.
      

  6.   


    我们做了个测试,可以正常发送/接收数据,但在资源关闭还存在问题。准备了几个类及页面:
    一个app_code中的静态类 TestSocket.cs
    有:public static Socket ClientSocket;
        public static string RecData = "";一个socket.aspx,建立/初始化了一个全局的ClientSocket连接。
    一个socketClose.aspx,关闭之前建立的全局的ClientSocket连接。相关代码:
    if (TestSocket.ClientSocket != null)
    {
        if (TestSocket.ClientSocket.Connected)
        {
            TestSocket.ClientSocket.Shutdown(SocketShutdown.Both);//发送完成之后停止Socket
            TestSocket.ClientSocket.Close();//发送完成之后关闭Socket
            Tools.WriteLog("断开之前连接:");
        }
    }一个tcp.aspx,用于发送/接收消息
    if (TestSocket.ClientSocket != null)
    {
        if (TestSocket.ClientSocket.Connected)//判断Socket是否已连接
        {
            byte[] SendMessage = new byte[100];
            SendMessage = Encoding.ASCII.GetBytes(_msg);
            CarTraffic.ClientSocket.Send(SendMessage);
            Tools.WriteLog("发送数据:" + _msg);
        }
    }///////////////////
    测试时,先开启socket.aspx,然后再运行tcp.aspx,从日志记录,观察到发送与接收到数据都没有问题。
    测试完毕,运行socketClose.aspx。最后在任务管理器,发现 aspnet_wp.exe进程,一直在90多左右。说明应该还有资源没有关闭掉。还需要哪儿作处理么?
      

  7.   

    我后来发现,在测试完之后,如果不调用socketClose.aspx页面的话,还不会出现aspnet_wp.exe进程占用CPU超高的异常.调用了之后反而出现异常.
    真是怪了. 有没有高人知道呢?