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

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

 2009-02-05 11:54:46 来源:WEB开发网   
核心提示: 图 5 异步套接字循环模式在图 4 中所示的 receive 循环中,ReceiveAsync 是可重入方法 ReceiveAsync(SocketAsyncEventArgs recvArgs) 的包装函数,使用 Silverlight 构建业务线企业级应用程序,第 1 部分(9),此方

图 5 异步套接字循环模式

在图 4 中所示的 receive 循环中,ReceiveAsync 是可重入方法 ReceiveAsync(SocketAsyncEventArgs recvArgs) 的包装函数,此方法将对套接字 I/O 完成端口的请求进行排队。.NET Framework 3.5 中引入的 SocketAsyncEventArgs 在 Silverlight 套接字实现中具有相似的作用,它可以在多个请求之间重复使用,从而避免垃圾收集改动。回调例程负责提取消息、触发消息处理事件并将下一个 receive 项加入队列以便继续循环。

为了处理接收不完整消息的情况,ReceiveCallback 会在将另一个请求加入队列之前调整缓冲区。NetworkMessage 包装在 ReceiveArgs 的实例中,并被传递给外部事件处理程序以便处理接收到的消息。

将部分消息(如果有)复制到缓冲区开头后,每次完成 NetworkMessage 接收后都会重置缓冲区。服务器上也使用相似的设计,但实际实现可从循环缓冲区中受益。

为实现“呼叫接受”方案,您需要创建一个可扩展的消息体系结构,该结构应使您能够序列化和反序列化包含任意内容的消息,而无需为每则新消息重写序列化逻辑。

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

图 6 序列化 NetworkMessage 类型的布局

此消息体系结构非常简单:每个 NetworkMessage 的子对象在实例化时使用合适的 MessageAction 声明其签名。由于源代码级别的兼容性,NetworkMessage.Serialize 和 Deserialize 实现可以在 Silverlight 和 .NET Framework 3.5(服务器上)上工作。序列化的消息布局如图 6 所示。

不必在消息开始处插入长度信息,您可以使用 "begin" 和 "end" 标记和适宜的转义序列。将长度信息编码到消息中能够大大简化缓冲区处理。

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

Tags:使用 Silverlight 构建

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