摘要: 在实际开发应用中,非UI线程操作UI是普遍存在的,在.net下一般是通过Control.Invoke的方法来进行操作,但到处都是Control.Invoke代码维护可是一件麻烦的事情。以下通过接口和队列来规范非UI线程操UI的实现。 既然要规范处理那接口是个不错的选择,以下定义一个简单的执行接口public interface IInvokeItem { void Execute(); } 以下是扩展一个简单的操作类封装class ControlInvoke<CONTROL,DATA> : IInvokeItem { public Contro... 阅读全文
posted @ 2012-08-06 12:33 beetlex 阅读(2429) 评论(7) 推荐(2) 编辑
摘要: 最近要针对Flash和Silverlight写一些Socket通讯的用例,由于这两者的Socket出于安全性考虑都需要一个Prolicy Server.在网上找了一下发现都只是代码没有相关程序直接用,于是就用Beetle实现了Flash和Silverlight的policy Server,使用的时候根据情况配置开启Flash或Silverlight.如果需要两者同时可以打开,以下简单地介绍实现过程。 首先我们必须知道Flash和Silverlight信任文件是怎样的. Flash<cross-domain-policy> <site-control permitted-cro 阅读全文
posted @ 2012-07-31 21:05 beetlex 阅读(1842) 评论(2) 推荐(1) 编辑
摘要: 由于一直忙于Beetle的开发和优化,Smark.Data组件已经有很长一段时间更新。这段时间发现Smark.Data在某些情况下不足,而这些情况又比较普遍所以进行了1.5版的更新。其更新的主要功能包括:查询可填充到自定义对象中,可直接执行存储过程和执行存储过程数据填充到对象中。查询可填充到自定义对象中在使用组件的时候会针对表制定一个数据对象结构,在查询的时候进行对象填充。但很多时候我们是需要查询这个对象,但实际上并不需要获取其所有信息。很多时候查询只是获取某几个成员信息,如果在应用做不到按需查询那对数据库的性能将会在着很大的影响。所以在1.5版中添加了这一功能,以下通过简单应但要相应的功.. 阅读全文
posted @ 2012-06-23 15:26 beetlex 阅读(1612) 评论(3) 推荐(1) 编辑
摘要: Beetle提供了基于Silverlight的实现Beetle.SL,由于WP7开发也是提供了Socket的支持所以Beetle.SL是完全可以在WP7下使用。还有ProtoBuf.net同样也支持WP7,因此可以通过Beetle.SL+ProtoBuf.net就能在WP7下实现基于对象传输的TCP通讯应用。 首先新建一个WP项目,分别引用Beetle.WP.DLL,Beetle.WP.ProtoBuf.DLL和protobuf-net.DLL;以上组件分另可以到http://beetlesl.codeplex.com/和http://code.google.com/p/protobuf... 阅读全文
posted @ 2012-06-17 10:41 beetlex 阅读(1329) 评论(1) 推荐(1) 编辑
摘要: Protobuf.net是Protobuf协议在.net平台下的实现,它支持源生的.net程序,Silverlight和window phon7的二进制序列化功能.在这里主要讲述在Silverlight Tcp通讯中使用Protobuf.net.在实现通讯前行制定一个通讯协议,主要是描述Protobuf.net序列化后的传输格式和获取时如何反序列化.协议描述主要分为3部分首先是描述消息的总长度,然后跟着就是消息的类型名称,组件通过应该名称来创建对应的消息对象,最后面跟着的就是相关对象的Protobuf序列化数据。 协议确定后就可以进行代码实现,由于之前已经写了一个Silverlight T.. 阅读全文
posted @ 2012-06-15 17:11 beetlex 阅读(2935) 评论(0) 推荐(2) 编辑
摘要: Thread.Sleep的主要功能是让线程挂起一段时间,而指定的时候可以是毫秒为单位,由于windows操作并不是实时操作系统,所以当Thread.Sleep指定的毫秒数少于15以下那基本是不太可能在这个时间内恢复线程到工作状态。既然是这样那在设计队列的时候就不得不面对一个处理延时的问题,首先看下以下代码:public virtual void Run() { while (!mDispose) { OnRun(); } } protect... 阅读全文
posted @ 2012-06-11 10:49 beetlex 阅读(4730) 评论(0) 推荐(0) 编辑
摘要: Beetle Agent是基于Beetle开发的代理服务软件,其主要目的是接收用户请求并根据实际请求的信息进行一个负载处理,它可以灵活地把请求分发到不同的应用服务器并把应用服务器处理的结果返回给具体的用户。 Beetle Agent的主要功能:1)可以随时添加应用服务器,支持应用服务器热加载。2)支持应用服务器热备份,当某个应用服务器不可用的时候,自动把消息路由到可工作的逻辑服务器上.3)可以实时查看不同逻辑服务器的资源情况4)支持消息路由设置,用户可以自己编写MessageHandler添加到服务器,可以根据不同的信息包括逻辑服务器资源情况进行一个消息路由定义。5)支持不同应用服务器信息.. 阅读全文
posted @ 2012-06-09 14:50 beetlex 阅读(432) 评论(0) 推荐(0) 编辑
摘要: 前两天打算给组件做个AMF3适配器用于组件和Flash进行通讯交互,经了解后发现FluorineFx在.net下对AMF3支持比较完善的一个项目,于就下载下来做一下集成.出于好奇于是看了一下相关代码,由于只需要用到序列化问题所以只关注了一下AMFWriter;从实现代码来看AMFWriter基本没有考虑高并发下的GC压力,数据写入过程基本都是通过new byte[]复制的方式.为了进行步了解于是对FluorineFx序列化对象做了个内存分析. 出来的结果让我摸不着头脑.损耗排在前面的竟然一些意想不到的对象...于是详细跟踪进行发现这两个对象的开销都来源于AMFWriter.GetMemb... 阅读全文
posted @ 2012-06-01 17:09 beetlex 阅读(1600) 评论(0) 推荐(0) 编辑
摘要: 之前的文章已经介绍了Beetle使用ProtoBuf.net进行对象序列化数据传输,这一章主要讲述Beetle如何使用FluorineFx和Flash进行AMF3通讯.其实现原理和使用ProtoBuf.net一样,扩展出一个MessageAdapter即可以. MessageAdapter的实现如下:public class MessageAdapter:IMessage { public object Message { get; set; } public static boo... 阅读全文
posted @ 2012-06-01 09:30 beetlex 阅读(2450) 评论(0) 推荐(1) 编辑
摘要: Beetle虽然提供了性能出色的二进制序列化功能,但毕竟需要用户通过writer和reader的方法来手动描述过程;事实上计较这些性能的场景并不多,很多时候一个自动序列化功能对程序的编写和维护都起到极其方便的作用。在设计的时候组件是通过接口的方式来描述消息读写操作,因此在扩展对Protobuf支持也是比较方便的。 Protobuf则Googler制定的一种对象序列化和反序列化方案,他在c++,java,net等不同语言平台都有相关的实现。而在.net下的实现分别有protobuf-net和protobuf-csharp-port;在这里选择了protobuf-net。从测试来看protob.. 阅读全文
posted @ 2012-05-28 09:44 beetlex 阅读(5238) 评论(3) 推荐(1) 编辑