使用 Silverlight 构建业务线企业级应用程序,第 1 部分
2009-02-05 11:54:46 来源:WEB开发网图 1 显示策略服务器在体系结构中的位置。当调用 Socket.ConnectAsync 时,消息流序列如图 3 所示。按照设计,消息 2、3 和 4 对用户代码完全不透明。
图 3 Silverlight 运行时自动为套接字连接请求跨域策略
我需要在与呼叫管理器服务器相同的 IP 地址上建立一个策略服务器。我可以在单个操作系统进程中建立这两个服务器,但为简单起见,我将在两个独立的控制台程序中实现它们。这些控制台程序可以轻松地转换为 Windows 服务,并能针对故障转移识别群集,以提供可靠性和可用性。
异步 I/O 循环
.NET Framework 3.5 为套接字引入新的异步编程 API;它们是以 Async() 结尾的方法。我将在服务器上使用的方法是 Socket.AcceptAsync、Socket.SendAsync 和 Socket.ReceiveAsync。异步方法通过使用 I/O 完成端口为高吞吐量服务器应用程序执行了优化,并通过可重用的 SocketAsyncEventArgs 类有效地接收和发送缓冲区管理。
由于不允许 Silverlight 创建 TCP 侦听器,所以其 Socket 类仅支持 ConnectAsync、SendAsync 和 ReceiveAsync。Silverlight 仅支持异步编程模型,这一点不仅适用于套接字 API,而且适用于所有网络交互。
由于我将同时在服务器和客户端上使用异步编程模型,所以让我们先熟悉一些设计模式。一种重复设计模式是 I/O 循环,它适用于所有 Async 操作。首先,我将介绍典型的同步执行套接字 accept 循环,如下所示:
_listener.Bind(localEndPoint);
_listener.Listen(50);
while (true)
{
Socket acceptedSocket = _listener.Accept();
RepConnection repCon = new
RepConnection(acceptedSocket);
Thread receiveThread = new Thread(ReceiveLoop);
receiveThread.Start(repCon);
}
同步 accept 非常直观且易于编程和维护,但该实现无法真正具备服务器可伸缩性,因为每个客户端连接都有专用的线程。如果连接很频繁,则几个连接就容易导致该实现达到峰值。
Tags:使用 Silverlight 构建
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接