WEB开发网
开发学院图形图像Flash 使用 Silverlight 构建业务线企业级应用程序,第 ... 阅读

使用 Silverlight 构建业务线企业级应用程序,第 1 部分

 2009-02-05 11:54:46 来源:WEB开发网   
核心提示: 为了使 Silverlight 能够在浏览器运行时环境中正常工作,它应该尽可能少干预资源,使用 Silverlight 构建业务线企业级应用程序,第 1 部分(8),前面所示的 "socket accept" 伪代码中的所有调用都会阻塞其执行线程,并因此对可伸缩性产生负

为了使 Silverlight 能够在浏览器运行时环境中正常工作,它应该尽可能少干预资源。前面所示的 "socket accept" 伪代码中的所有调用都会阻塞其执行线程,并因此对可伸缩性产生负面影响。因此,Silverlight 在阻塞调用方面限制很多,实际上它只允许与网络资源进行异步交互。异步循环需要调整思维模式,您可以假想它是一个不可见的信箱,并且它任何时候都包含至少一个请求以便使循环能够工作。

图 4 显示了一个 receive 循环(代码下载中包含更完整的实现)。在该实现中并没有类似于前面同步套接字 accept 伪代码中所示的 while (true) 无限循环编程结构。习惯使用这种编程结构对于 Silverlight 开发人员来说至关重要。为了使 receive 循环能够在已接收并处理完消息后继续接收数据,队列中至少应包含一个对已连接套接字关联 I/O 完成端口的请求。典型的 async 循环如图 5 所示,它适用于 ConnectAsync、ReceiveAsync 和 SendAsync。在使用 .NET Framework 3.5 的服务器上可以将 AcceptAsync 添加到此列表。

使用 Silverlight 构建业务线企业级应用程序,第 1 部分图 4 使用 Silverlight 套接字的 Async Send/Receive 循环

public class CallNetworkClient
{
  private Socket _socket;
  private ReceiveBuffer _receiveBuffer;
  public event EventHandler<EventArgs> OnConnectError;
  public event EventHandler<ReceiveArgs> OnReceive;
  public SocketAsyncEventArgs _receiveArgs;
  public SocketAsyncEventArgs _sendArgs;
//removed for space
  public void ReceiveAsync()
  {
    ReceiveAsync(_receiveArgs);
  }
  private void ReceiveAsync(SocketAsyncEventArgs recvArgs)
  {
    if (!_socket.ReceiveAsync(recvArgs))
    {
     ReceiveCallback(_socket, recvArgs);
    }
  }
  void ReceiveCallback(object sender, SocketAsyncEventArgs e)
  {
   if (e.SocketError != SocketError.Success)
   {
    return;
   }
   _receiveBuffer.Offset += e.BytesTransferred;
   if (_receiveBuffer.IsMessagePresent())
   {
    if (OnReceive != null)
    {
      NetworkMessage msg =
            NetworkMessage.Deserialize(_receiveBuffer.Buffer);
      _receiveBuffer.AdjustBuffer();
      OnReceive(this, new ReceiveArgs(msg));
    }
   }
   else
   {
    //adjust the buffer pointer
    e.SetBuffer(_receiveBuffer.Offset, _receiveBuffer.Remaining);
   }
   //queue an async read request
   ReceiveAsync(_receiveSocketArgs);
  }
  public void SendAsync(NetworkMessage msg) { ... }
  private void SendAsync(SocketAsyncEventArgs sendSocketArgs) 
  {
  ...
  }
   void SendCallback(object sender, SocketAsyncEventArgs e) 
  {
  ...
  }
  }

使用 Silverlight 构建业务线企业级应用程序,第 1 部分

上一页  3 4 5 6 7 8 9 10  下一页

Tags:使用 Silverlight 构建

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接