<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_江大鱼的BLOG</title><subtitle type="text">江振宇的博客：让有限的代码释放尽可能多的商业价值(转载本人原创文章请注明出处)</subtitle><id>http://feed.cnblogs.com/blog/u/11249/rss</id><updated>2012-02-08T01:48:21Z</updated><author><name>江大鱼</name><uri>http://www.cnblogs.com/jzywh/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jzywh/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/11249/rss"/><entry><id>http://www.cnblogs.com/jzywh/archive/2012/01/18/SuperSocketSuperWebSocket2012.html</id><title type="text">2012年的一些愿景</title><summary type="text">从SuperSocket开源到现在已经经历了近两年时间。对比现在的代码和两年前第一次签入Codeplex代码库的代码，可以看SuperSocket的改进还是很多的。过去的一年(2011)对于SuperSocket来说是很重要的一年，年初的1.3 stable，年中的1.4 stable和年底的1.4 SP2都是里程碑式的版本。SuperWebSocket在2011年里也从一个SuperSocket的示例项目成长为一个知名的WebSocket服务器实现，而且获得了不少用户的好评。在过去的一年里，有很多用户通过使用SuperSocket和SuperWebSocket搭建起了稳定、可靠的Socket服务器，我对此甚感欣慰，我投入的精力没有白费，我的工作是有价值的。很多用户给SuperSocket和SuperWebSocket提出了一些问题，有些是缺陷，有些是新的功能需求，也有一些用户提出了对性能方面的关切，这些都是我在2012年里在自己的开源项目方面前进的动力。</summary><published>2012-01-18T07:23:00Z</published><updated>2012-01-18T07:23:00Z</updated><author><name>江大鱼</name><uri>http://www.cnblogs.com/jzywh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jzywh/archive/2012/01/18/SuperSocketSuperWebSocket2012.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jzywh/archive/2012/01/18/SuperSocketSuperWebSocket2012.html"/><content type="html">&lt;p&gt;从&lt;strong&gt;SuperSocket&lt;/strong&gt;开源到现在已经经历了近两年时间。对比现在的代码和两年前第一次签入Codeplex代码库的代码，可以看SuperSocket的改进还是很多的。过去的一年(2011)对于SuperSocket来说是很重要的一年，年初的1.3 stable，年中的1.4 stable和年底的1.4 SP2都是里程碑式的版本。&lt;strong&gt;SuperWebSocket&lt;/strong&gt;在2011年里也从一个SuperSocket的示例项目成长为一个知名的WebSocket服务器实现，而且获得了不少用户的好评。在过去的一年里，有很多用户通过使用SuperSocket和SuperWebSocket搭建起了稳定、可靠的Socket服务器，我对此甚感欣慰，我投入的精力没有白费，我的工作是有价值的。很多用户给&lt;strong&gt;SuperSocket&lt;/strong&gt;和&lt;strong&gt;SuperWebSocket&lt;/strong&gt;提出了一些问题，有些是缺陷，有些是新的功能需求，也有一些用户提出了对性能方面的关切，这些都是我在2012年里在自己的开源项目方面前进的动力。&lt;/p&gt;&#xD;
&lt;p&gt;在2012年，SuperSocket将发布1.5版本，该版本将在如下面做一些改进:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;易用性&lt;strong&gt;:&amp;nbsp;&lt;/strong&gt;&lt;/strong&gt;更简洁、直接的API和更容易实现的自定义协议接口&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;可控性:&amp;nbsp;&lt;/strong&gt;SuperSocket将提供服务器管理工具，能够对一台服务器上的SuperSocket实例或者多台服务器上的SuperSocket实例进行管理(启动，停止，监控日志)，同时具备扩展性&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;动态性&lt;strong&gt;:&amp;nbsp;&lt;/strong&gt;&lt;/strong&gt;动态语言的支持&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;高性能&lt;strong&gt;:&amp;nbsp;&lt;/strong&gt;&lt;/strong&gt;更好的异步编程支持，更少的CPU和内存占用&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;隔离性&lt;strong&gt;:&amp;nbsp;&lt;/strong&gt;&lt;/strong&gt;实现服务器实例之间的应用程序域级别的隔离，进程级别的隔离&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;SuperWebSocket&lt;/strong&gt;在拥有&lt;strong&gt;SuperSocket&lt;/strong&gt;的改进带来的优点的同时，也会提供更好的协议兼容性和扩展性，成为一个真正成熟的WebSocket服务器产品。在2012年里，SuperWebSocket将会在多个测试版本发布之后，最终发布1.0的稳定版，它将是SuperWebSocket的第一个稳定版本。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在客户端方面，&lt;strong&gt;WebSocket4Net&lt;/strong&gt;将会得到很大的改进，特别是在大量连接并发和连接池的场景下的能够保持较高的性能。而且我将会在移动平台(Windows Phone, Mono for Android, MonoTouch)上为WebSocket4Net做更多测试。SuperSocket服务器管理工具将使用WebSocket4Net作为客户端连接器，这将为WebSocket4Net提供实验场，同时它也可作为WebSocket4Net的高级使用示例。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在2011年，有一个新的，很有趣的想法，但是没有机会去实现。它是一个分布式的任务执行系统，客户端运行在多个计算机上，这些客户端与服务器保持实时通信，服务器端会分配任务给客户端执行，客户端执行完后把执行结果返回给服务器端。这些任务可以是客户端程序集中定义好了的方法，也可以是一段动态语言的脚本，服务器端也可以把包含任务的程序集发送给客户端来执行。总之任务的定义在服务器端，客户端只需执行任务并返回结果。这样的系统可以应用于很多场景，模拟多个客户端的性能、功能测试，多服务器的管理，等等。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;商业化的想法其实早就有了，但必须遵循一个原则，那就是SuperSocket本身必须是开源的。FTP服务器可能是商业化的一个切入点，我自己实现了一个基于SuperSocket的FTP服务器的基本实现，但时还缺少管理工具，SuperSocket 1.5出来之后我的FTP server将会基于SuperSocket管理工具来开发FTP服务器的管理功能。FTP服务器很简单，IIS直接可以提供FTP功能，但是必须与Windows用户集成，好像IIS7有API可以定制，但是在Linux上我们无法使用IIS。所以我的FTP服务器将主打易于集成现有系统和跨平台这两个特性，而且它可能会自带几个最常见的系统的集成，比如说DiscuzNT。上面提到的分布式的任务执行系统，也可能将是一个商业的解决方案。质量很烂的东西，你卖得再便宜，人家也不一定会买，相反质量高的产品，你的出价稍高，也会有很多人掏腰包。所以产品的质量上去了，商业化水到渠成。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;2012年目标很多，但都是可以实现的，我把他们简单的罗列在这里，这样可以让我理清一下思路，用户也可以发表一下自己的看法。在2012年底，让我们来一起验证这些目标是否都已经实现吧！&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jzywh/aggbug/2325629.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jzywh/archive/2012/01/18/SuperSocketSuperWebSocket2012.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jzywh/archive/2012/01/13/SuperWebSocket01.html</id><title type="text">SuperWebSocket发布0.1版本</title><summary type="text">SuperWebSocket在发布了8个drop版本之后，SuperWebSocket 0.1诞生了, 停止发布drop转而发布正式的测试版的原因是SuperWebSocket最近兼容了rfc6455 (通过IETF批准的标准协议)，而以前的drop版本只支持草案版本的websocket协议。这样的改进对代码的改动很小，但对RFC6455这样一个标准协议的兼容也是具有标志意义的。</summary><published>2012-01-13T02:28:00Z</published><updated>2012-01-13T02:28:00Z</updated><author><name>江大鱼</name><uri>http://www.cnblogs.com/jzywh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jzywh/archive/2012/01/13/SuperWebSocket01.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jzywh/archive/2012/01/13/SuperWebSocket01.html"/><content type="html">&lt;p&gt;&lt;strong&gt;SuperWebSocket&lt;/strong&gt;在发布了8个drop版本之后，&lt;strong&gt;SuperWebSocket 0.1&lt;/strong&gt;诞生了, 停止发布drop转而发布正式的测试版的原因是&lt;strong&gt;SuperWebSocket&lt;/strong&gt;最近兼容了rfc6455 (通过IETF批准的标准协议)，而以前的drop版本只支持草案版本的&lt;strong&gt;websocket&lt;/strong&gt;协议。这样的改进对代码的改动很小，但对&lt;strong&gt;RFC6455&lt;/strong&gt;这样一个标准协议的兼容也是具有标志意义的。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;SuperWebSocket 0.1&lt;/strong&gt; 包含如下改动:&lt;/p&gt;&#xD;
&lt;ol&gt;&#xD;
&lt;li&gt;新增对RFC6455的兼容&lt;/li&gt;&#xD;
&lt;li&gt;改进了对多个子协议的配置和多个命令程序集的配置&lt;/li&gt;&#xD;
&lt;li&gt;新增了Windows Azure托管代码示例&lt;/li&gt;&#xD;
&lt;li&gt;提供了更好的Mono兼容性&lt;/li&gt;&#xD;
&lt;li&gt;多项性能改进&lt;/li&gt;&#xD;
&lt;li&gt;升级SuperSocket到1.4 SP2&lt;/li&gt;&#xD;
&lt;li&gt;升级Json.NET到最新版本&lt;/li&gt;&#xD;
&lt;li&gt;新增了自动断开长时间连接但未握手成功的连接的功能&lt;/li&gt;&#xD;
&lt;/ol&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;该版本下载地址:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://superwebsocket.codeplex.com/releases/view/80430"&gt;http://superwebsocket.codeplex.com/releases/view/80430&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jzywh/aggbug/2321284.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jzywh/archive/2012/01/13/SuperWebSocket01.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jzywh/archive/2012/01/09/2317022.html</id><title type="text">用ILMerge合并Silverlight, WindowsPhone或Mono for Android的程序集</title><summary type="text">为大家所知，ILMerge可用于合并.NET的程序集，但如何合并Silverlight,WindowsPhone或者Mono for Android的程序集呢？其实ILMerge命令参数targetplatform已经提供了对此项功能的支持。ILMerge下载地址:http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=17630使用ILMerge合并Silverlight程序集:set srcdir=D:\Bin\Silverlightset outdir=D:\Bin\Silverlight\Outpu</summary><published>2012-01-09T05:47:00Z</published><updated>2012-01-09T05:47:00Z</updated><author><name>江大鱼</name><uri>http://www.cnblogs.com/jzywh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jzywh/archive/2012/01/09/2317022.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jzywh/archive/2012/01/09/2317022.html"/><content type="html">&lt;p&gt;为大家所知，ILMerge可用于合并.NET的程序集，但如何合并Silverlight,WindowsPhone或者Mono for Android的程序集呢？其实ILMerge命令参数targetplatform已经提供了对此项功能的支持。&lt;/p&gt;&#xD;
&lt;p&gt;ILMerge下载地址:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=17630"&gt;http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=17630&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;使用ILMerge合并Silverlight程序集:&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;set srcdir=D:\Bin\Silverlight&lt;/p&gt;&#xD;
&lt;p&gt;set outdir=D:\Bin\Silverlight\Output&lt;/p&gt;&#xD;
&lt;p&gt;set sldir=%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0&lt;br /&gt;if not exist "%sldir%" (&lt;br /&gt;&amp;nbsp; &amp;nbsp; set sldir=%ProgramFiles%\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0&lt;br /&gt;)&lt;/p&gt;&#xD;
&lt;p&gt;ILMerge /targetplatform:v4,"%sldir%" /ndebug /log /out:%outdir%\WebSocket4Net.dll %srcdir%\WebSocket4Net.dll %srcdir%\SuperSocket.ClientEngine.dll&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;使用ILMerge合并WindowsPhone程序集:&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;set srcdir=D:\Bin\WindowsPhone&lt;/p&gt;&#xD;
&lt;p&gt;set outdir=D:\Bin\WindowsPhone\Output&lt;/p&gt;&#xD;
&lt;p&gt;set wpdir=%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71&lt;br /&gt;if not exist "%wpdir%" (&lt;br /&gt;&amp;nbsp; &amp;nbsp; set wpdir=%ProgramFiles%\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71&lt;br /&gt;)&lt;/p&gt;&#xD;
&lt;p&gt;ILMerge /targetplatform:v4,"%wpdir%" /ndebug /log /out:%outdir%\WebSocket4Net.dll %srcdir%\WebSocket4Net.dll %srcdir%\SuperSocket.ClientEngine.dll&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;使用ILMerge合并Mono for Android程序集:&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;set srcdir=D:\Bin\MonoDroid&lt;/p&gt;&#xD;
&lt;p&gt;set outdir=D:\Bin\MonoDroid\Output&lt;/p&gt;&#xD;
&lt;p&gt;set mddir=%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\MonoAndroid\v1.0&lt;br /&gt;if not exist "%mddir%" (&lt;br /&gt;&amp;nbsp; &amp;nbsp; set mddir=%ProgramFiles%\Reference Assemblies\Microsoft\Framework\MonoAndroid\v1.0&lt;br /&gt;)&lt;/p&gt;&#xD;
&lt;p&gt;ILMerge /targetplatform:v4,"%mddir%" /ndebug /log /out:%outdir%\WebSocket4Net.dll %srcdir%\WebSocket4Net.dll %srcdir%\SuperSocket.ClientEngine.dll&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jzywh/aggbug/2317022.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jzywh/archive/2012/01/09/2317022.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jzywh/archive/2011/12/28/SuperSocket1_4SP2.html</id><title type="text">SuperSocket 1.4 SP2 发布了！</title><summary type="text">SuperSocket 1.4 SP2终于在2012年来临之前发布了，他是一个非常重要的版本。很有可能它将是SuperSocket 1.4的最后一个release. 在明年，我将专注于SuperSocket 1.5的开发，1.5会新增几个十分重要的功能，比如动态语言的支持，客户端管理工具等等。这些新的功能将在未来的一年里通过beta发布的方式陆续和大家见面。在SuperSocket 1.4 SP2这个版本里，包含了如下更新：改进了ArraySegmentList和BinaryUtil的性能 改进了命令行协议实现的性能 新增了子配置节点的自定义功能 异步的TLS/SSL支持(通过SslStrea</summary><published>2011-12-28T02:16:00Z</published><updated>2011-12-28T02:16:00Z</updated><author><name>江大鱼</name><uri>http://www.cnblogs.com/jzywh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jzywh/archive/2011/12/28/SuperSocket1_4SP2.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jzywh/archive/2011/12/28/SuperSocket1_4SP2.html"/><content type="html">&lt;p&gt;SuperSocket 1.4 SP2终于在2012年来临之前发布了，他是一个非常重要的版本。很有可能它将是SuperSocket 1.4的最后一个release. 在明年，我将专注于SuperSocket 1.5的开发，1.5会新增几个十分重要的功能，比如动态语言的支持，客户端管理工具等等。这些新的功能将在未来的一年里通过beta发布的方式陆续和大家见面。&lt;/p&gt;&#xD;
&lt;p&gt;在SuperSocket 1.4 SP2这个版本里，包含了如下更新：&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;改进了ArraySegmentList和BinaryUtil的性能 &lt;br /&gt;改进了命令行协议实现的性能 &lt;br /&gt;新增了子配置节点的自定义功能 &lt;br /&gt;异步的TLS/SSL支持(通过SslStream) &lt;br /&gt;修复了UDP会话的"StartSession()"方法无法被触发的缺陷 &lt;br /&gt;移除了会话的按结束标记和按长度接收的功能 &lt;br /&gt;新增了允许在命令中设置NextCommandReader的功能 &lt;br /&gt;新增了在SocketService中服务描述和依赖服务可配置的功能 &lt;br /&gt;更好的兼容Mono(2.10.+) &lt;br /&gt;支持强命名编译 &lt;br /&gt;新增socket服务器监听队列大小可配置的功能&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SuperSocket 1.4 SP2 下载地址&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://supersocket.codeplex.com/releases/view/79410"&gt;http://supersocket.codeplex.com/releases/view/79410&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jzywh/aggbug/2304351.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jzywh/archive/2011/12/28/SuperSocket1_4SP2.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jzywh/archive/2011/09/20/SuperSocket1_4SP1.html</id><title type="text">无需等待，SuperSocket 1.4 SP1 发布了！</title><summary type="text">SuperSocket 1.4 SP1修复了几个在1.4的第一个稳定版本中存在的几个bug,还增加了几个实用的小功能：修复了发送大数据量数据到客户端无法完整发送的缺陷修复了策略服务器中获取策略文件路径在某些情况下不正确的缺陷给类ArraySegementList增加了方法TrimEnd(int trimSize)给Socket会话增加了新方法SendResponse(byte[] data, int offset, int length);改进UDP 服务器实现，使其支持从应用层获取SessionKey新增禁用会话快照的支持SuperSocket 1.4 SP1 下载地址:http://sup</summary><published>2011-09-20T14:31:00Z</published><updated>2011-09-20T14:31:00Z</updated><author><name>江大鱼</name><uri>http://www.cnblogs.com/jzywh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jzywh/archive/2011/09/20/SuperSocket1_4SP1.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jzywh/archive/2011/09/20/SuperSocket1_4SP1.html"/><content type="html">&lt;p&gt;SuperSocket 1.4 SP1修复了几个在1.4的第一个稳定版本中存在的几个bug,还增加了几个实用的小功能：&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;修复了发送大数据量数据到客户端无法完整发送的缺陷&lt;/li&gt;&#xD;
&lt;li&gt;修复了策略服务器中获取策略文件路径在某些情况下不正确的缺陷&lt;/li&gt;&#xD;
&lt;li&gt;给类ArraySegementList增加了方法TrimEnd(int trimSize)&lt;/li&gt;&#xD;
&lt;li&gt;给Socket会话增加了新方法SendResponse(byte[] data, int offset, int length);&lt;/li&gt;&#xD;
&lt;li&gt;改进UDP 服务器实现，使其支持从应用层获取SessionKey&lt;/li&gt;&#xD;
&lt;li&gt;新增禁用会话快照的支持&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SuperSocket 1.4 SP1 下载地址:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://supersocket.codeplex.com/releases/view/73641"&gt;http://supersocket.codeplex.com/releases/view/73641&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jzywh/aggbug/2182913.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jzywh/archive/2011/09/20/SuperSocket1_4SP1.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jzywh/archive/2011/07/06/2099097.html</id><title type="text">SuperSocket 1.4 stable正式发布</title><summary type="text">SuperSocket 1.4 stable已于今日正式发布了！下载地址为: http://supersocket.codeplex.com/releases/view/69473什么是SuperSocket？SuperSocket 是一个轻量级的,可扩展的,跨平台的.NET Socket 服务器开发框架，可用来构建一个基于命令的服务器端Socket 程序，而无需了解如何使用Socket，如何维护Socket连接，亦无需了解Socket是如何工作的。该项目使用纯 C# 开发，易于扩展和集成到已有的项目。只要你的已有系统（forum/CRM/MIS/HRM/ERP）是使用.NET开发的，你都能够</summary><published>2011-07-06T04:56:00Z</published><updated>2011-07-06T04:56:00Z</updated><author><name>江大鱼</name><uri>http://www.cnblogs.com/jzywh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jzywh/archive/2011/07/06/2099097.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jzywh/archive/2011/07/06/2099097.html"/><content type="html">&lt;p&gt;SuperSocket 1.4 stable已于今日正式发布了！&lt;/p&gt;&#xD;
&lt;p&gt;下载地址为: &lt;a href="http://supersocket.codeplex.com/releases/view/69473"&gt;http://supersocket.codeplex.com/releases/view/69473&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;什么是SuperSocket？&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;SuperSocket 是一个轻量级的,可扩展的,跨平台的.NET Socket 服务器开发框架，可用来构建一个基于命令的服务器端Socket 程序，而无需了解如何使用Socket，如何维护Socket连接，亦无需了解Socket是如何工作的。该项目使用纯 C# 开发，易于扩展和集成到已有的项目。只要你的已有系统（forum/CRM/MIS/HRM/ERP）是使用.NET开发的，你都能够使用SuperSocket轻易的开发出你需要的Socket服务器应用程序来集成到你的现有系统之中。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;SuperSocket三个重要特点:&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;轻量级:&amp;nbsp; 少于3000行代码&lt;/li&gt;&#xD;
&lt;li&gt;可扩展:&amp;nbsp; 易于扩展, SuperSocket的设计充分考虑到扩展性&lt;/li&gt;&#xD;
&lt;li&gt;跨平台:&amp;nbsp; 能运行于Windows系统和Unix系统(通过Mono)&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;SuperSocket项目主页，SuperSocket的更多信息请通过其项目主页获取。&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://supersocket.codeplex.com/"&gt;http://supersocket.codeplex.com/&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;SuperSocket相关文档&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/jzywh/archive/2011/04/19/SuperSocketDocument.html"&gt;http://www.cnblogs.com/jzywh/archive/2011/04/19/SuperSocketDocument.html&lt;/a&gt;&amp;nbsp; 中文&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://supersocket.codeplex.com/documentation"&gt;http://supersocket.codeplex.com/documentation&lt;/a&gt;&amp;nbsp; 英文&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;SuperSocket 1.4 stable相对于上个版本的改动包含:&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;新增功能:&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;使线程池大小可配置&lt;/li&gt;&#xD;
&lt;li&gt;命令过滤器&lt;/li&gt;&#xD;
&lt;li&gt;连接过滤器&lt;/li&gt;&#xD;
&lt;li&gt;Windows Azure平台支持&lt;/li&gt;&#xD;
&lt;li&gt;使TCP Keep Alive 参数可配置&lt;/li&gt;&#xD;
&lt;li&gt;支持Mono(Mono 2.10 或更新版本)&lt;/li&gt;&#xD;
&lt;li&gt;内置的Flash/Silverlight策略服务器&lt;/li&gt;&#xD;
&lt;li&gt;多个命令程序集的支持&lt;/li&gt;&#xD;
&lt;li&gt;新增了更多的的QuickStart示例项目&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;改进:&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;使用TPL处理多线程相关事务&lt;/li&gt;&#xD;
&lt;li&gt;将接收到的数据处理过程从完成端口线程池转移到工作线程池（异步模式下）&lt;/li&gt;&#xD;
&lt;li&gt;简化和改进了异步操作的扩展&lt;/li&gt;&#xD;
&lt;li&gt;改进了性能日志和性能数据采集的应用程序接口&lt;/li&gt;&#xD;
&lt;li&gt;通过会话快照提升会话获取的性能&lt;/li&gt;&#xD;
&lt;li&gt;改进配置相关的代码&lt;/li&gt;&#xD;
&lt;li&gt;简化自定义协议的实现&lt;/li&gt;&#xD;
&lt;li&gt;改进自定义协议以支持在一次接收过程中获取多个命令&lt;/li&gt;&#xD;
&lt;li&gt;允许命令行协议的编码自定义&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;缺陷修复:&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;修复了UDP会话中方法SendResponse(byte[] data)未实现的问题&lt;/li&gt;&#xD;
&lt;li&gt;修复了当有多个服务器实例运行时多余的日志目录会被创建的问题&lt;/li&gt;&#xD;
&lt;li&gt;修复了通过会话根据数据长度或者结束符来读取数据的问题&lt;/li&gt;&#xD;
&lt;/ul&gt;&#xD;
&lt;p&gt;&lt;strong&gt;其它更改:&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;ul&gt;&#xD;
&lt;li&gt;将自动清除超时会话的配置的默认值设成false&lt;/li&gt;&#xD;
&lt;li&gt;将会话默认的字符编码从Encoding.Default改成UTF8&lt;/li&gt;&#xD;
&lt;li&gt;将配置中service节点的serviceName属性更名为name&lt;/li&gt;&#xD;
&lt;li&gt;缩减日志中会话标识的长度&lt;/li&gt;&#xD;
&lt;/ul&gt;&lt;img src="http://www.cnblogs.com/jzywh/aggbug/2099097.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jzywh/archive/2011/07/06/2099097.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jzywh/archive/2011/05/16/2048157.html</id><title type="text">SuperSocket系列文档(18) 在Unix/Linux操作系统中通过Mono运行SuperSocket</title><summary type="text">SuperSocket通过Mono来实现.NET程序的跨平台，SuperSocket最低支持的Mono的版本为2.10。由于Unix/Linux不同于Windows上的文件路径格式，SuperSocket提供了专用于Unix/Linux系统上的log4net文件：/Solution Items/log4net.unix.config因此，你需要将此文件包含到你的项目输出目录的Config子目录下。在Unix/Linux操作系统中，SuperSocket同样可以通过Mono以控制台和服务这两种形式运行。控制台运行:mono SuperSocket.SocketService.exe –cMono</summary><published>2011-05-16T14:14:00Z</published><updated>2011-05-16T14:14:00Z</updated><author><name>江大鱼</name><uri>http://www.cnblogs.com/jzywh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jzywh/archive/2011/05/16/2048157.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jzywh/archive/2011/05/16/2048157.html"/><content type="html">&lt;p&gt;SuperSocket通过Mono来实现.NET程序的跨平台，SuperSocket最低支持的Mono的版本为2.10。&lt;/p&gt;&#xD;
&lt;p&gt;由于Unix/Linux不同于Windows上的文件路径格式，SuperSocket提供了专用于Unix/Linux系统上的log4net文件：/Solution Items/log4net.unix.config&lt;/p&gt;&#xD;
&lt;p&gt;因此，你需要将此文件包含到你的项目输出目录的Config子目录下。&lt;/p&gt;&#xD;
&#xD;
&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;在Unix/Linux操作系统中，SuperSocket同样可以通过Mono以控制台和服务这两种形式运行。&lt;/p&gt;&#xD;
&lt;p&gt;控制台运行:&lt;/p&gt;&#xD;
&lt;p&gt;mono SuperSocket.SocketService.exe &amp;ndash;c&lt;/p&gt;&#xD;
&lt;p&gt;Mono Service形式运行:&lt;/p&gt;&#xD;
&lt;p&gt;mono mono-service &amp;ndash;l:supersocket.lock &amp;ndash;m:supersocket.log SuperSocket.SocketService.exe&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jzywh/aggbug/2048157.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jzywh/archive/2011/05/16/2048157.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jzywh/archive/2011/05/16/2048131.html</id><title type="text">SuperSocket系列文档(17) 在Windows Azure中运行SuperSocket</title><summary type="text">Windows Azure是微软的云计算平台！Windows Azure通过微软的数据中心为开发人员提供以按需的计算能力和存储能力去托管、扩展和管理互联网上的应用程序。运行于Windows Azure上的应用程序具有很高的可靠性和可伸缩性。基于SuperSocket的服务器程序可以轻易的运行于Windows Azure平台之上。和普通Socket服务器程序不同，首先需要在Role的属性中设置Socket程序对外提供服务的Endpoint:然后在WorkerRole代码文件中动态的获取外部Endpoint所对应的内部Endpoint：var instanceEndpoint = RoleEnvi</summary><published>2011-05-16T13:56:00Z</published><updated>2011-05-16T13:56:00Z</updated><author><name>江大鱼</name><uri>http://www.cnblogs.com/jzywh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jzywh/archive/2011/05/16/2048131.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jzywh/archive/2011/05/16/2048131.html"/><content type="html">&lt;p&gt;Windows Azure是微软的云计算平台！Windows Azure通过微软的数据中心为开发人员提供以按需的计算能力和存储能力去托管、扩展和管理互联网上的应用程序。&lt;/p&gt;&#xD;
&lt;p&gt;运行于Windows Azure上的应用程序具有很高的可靠性和可伸缩性。&lt;/p&gt;&#xD;
&lt;p&gt;基于SuperSocket的服务器程序可以轻易的运行于Windows Azure平台之上。&lt;/p&gt;&#xD;
&lt;p&gt;和普通Socket服务器程序不同，首先需要在Role的属性中设置Socket程序对外提供服务的Endpoint:&lt;/p&gt;&#xD;
&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/jzywh/201105/201105162155433236.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="M[90I@W~C78O1JN{4D@S@$9[4]" src="http://images.cnblogs.com/cnblogs_com/jzywh/201105/201105162155464400.jpg" alt="M[90I@W~C78O1JN{4D@S@$9[4]" width="718" height="182" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&#xD;
&lt;p&gt;然后在WorkerRole代码文件中动态的获取外部Endpoint所对应的内部Endpoint：&lt;/p&gt;&#xD;
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 400px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;&#xD;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&#xD;
&lt;pre&gt;var instanceEndpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[serverConfig.Name + &lt;span style="color: #006080;"&gt;"Endpoint"&lt;/span&gt;];&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&#xD;
&lt;p&gt;完整的代码如下:&lt;/p&gt;&#xD;
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 600px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;&#xD;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; OnStart()&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;{&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;LogUtil.Setup();&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008000;"&gt;// Set the maximum number of concurrent connections &lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;ServicePointManager.DefaultConnectionLimit = 100;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008000;"&gt;// For information on handling configuration changes&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #008000;"&gt;// see the MSDN topic at http://go.microsoft.com/fwlink/?LinkId=166357.&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;var serverConfig = ConfigurationManager.GetSection(&lt;span style="color: #006080;"&gt;"socketServer"&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; SocketServiceConfig;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!SocketServerManager.Initialize(serverConfig, ResolveServerConfig))&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;{&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;Trace.WriteLine(&lt;span style="color: #006080;"&gt;"Failed to initialize SuperSocket!"&lt;/span&gt;, &lt;span style="color: #006080;"&gt;"Error"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;}&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!SocketServerManager.Start())&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;{&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;Trace.WriteLine(&lt;span style="color: #006080;"&gt;"Failed to start SuperSocket!"&lt;/span&gt;, &lt;span style="color: #006080;"&gt;"Error"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;}&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;.OnStart();&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;}&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; IServerConfig ResolveServerConfig(IServerConfig serverConfig)&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;{&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;var config = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; ServerConfig();&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;serverConfig.CopyPropertiesTo(config);&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;var instanceEndpoint = RoleEnvironment.CurrentRoleInstance.InstanceEndpoints[serverConfig.Name + &lt;span style="color: #006080;"&gt;"Endpoint"&lt;/span&gt;];&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (instanceEndpoint == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;{&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;Trace.WriteLine(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #006080;"&gt;"Failed to find Input Endpoint configuration {0}!"&lt;/span&gt;, serverConfig.Name + &lt;span style="color: #006080;"&gt;"Endpoint"&lt;/span&gt;), &lt;span style="color: #006080;"&gt;"Error"&lt;/span&gt;);&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; serverConfig;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;}&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;var ipEndpoint = instanceEndpoint.IPEndpoint;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;config.Ip = ipEndpoint.Address.ToString();&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;config.Port = ipEndpoint.Port;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; config;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;}&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;就这样，你的SuperSocket服务器程序就可以正确的运行在Windows Azure平台之上。&lt;/p&gt;&#xD;
&lt;p&gt;完整的示例代码，请参考源代码中WindowsAzure文件夹下的项目。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jzywh/aggbug/2048131.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jzywh/archive/2011/05/16/2048131.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jzywh/archive/2011/05/16/2048091.html</id><title type="text">SuperSocket系列文档(16) 在SuperSocket中启用传输层加密(TLS/SSL)</title><summary type="text">SuperSocket支持同步模式(Sync)下的传输层加密(TLS/SSL)。首先，你需要准备好用于加密的证书文件(带私钥)。用于测试的证书可由SuperSocket的CertificateCreator来生成(http://supersocket.codeplex.com/releases/view/59311), 生成之后(*.pfx)导入到测试服务器的可信任证书目录中。生产环境的证书需要向证书颁发机构提交申请之后才能获得证书文件，获得证书之后到计算机的证书管理器中导出该证书的带私钥的证书文件(*.pfx).然后，在配置文件中增加加密传输的相关属性和节点。&amp;lt;server name=</summary><published>2011-05-16T13:21:00Z</published><updated>2011-05-16T13:21:00Z</updated><author><name>江大鱼</name><uri>http://www.cnblogs.com/jzywh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jzywh/archive/2011/05/16/2048091.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jzywh/archive/2011/05/16/2048091.html"/><content type="html">&lt;p&gt;SuperSocket支持同步模式(Sync)下的传输层加密(TLS/SSL)。&lt;/p&gt;&#xD;
&lt;p&gt;首先，你需要准备好用于加密的证书文件(带私钥)。用于测试的证书可由SuperSocket的CertificateCreator来生成(&lt;a title="http://supersocket.codeplex.com/releases/view/59311" href="http://supersocket.codeplex.com/releases/view/59311"&gt;http://supersocket.codeplex.com/releases/view/59311&lt;/a&gt;), 生成之后(*.pfx)导入到测试服务器的可信任证书目录中。生产环境的证书需要向证书颁发机构提交申请之后才能获得证书文件，获得证书之后到计算机的证书管理器中导出该证书的带私钥的证书文件(*.pfx).&lt;/p&gt;&#xD;
&lt;p&gt;然后，在配置文件中增加加密传输的相关属性和节点。&lt;/p&gt;&#xD;
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 200px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;&#xD;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;server&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="SecureSuperWebSocket"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;serviceName&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="SuperWebSocket"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;ip&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Any"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;port&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="2012"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;mode&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Sync"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;security&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="tls"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;certificate&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;filePath&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="supersocket.pfx"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;password&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="supersocket"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;isEnabled&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="true"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;certificate&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;server&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&#xD;
&lt;p&gt;server节点的属性security="tls", 表示传输层启用TLS加密。&lt;/p&gt;&#xD;
&lt;p&gt;server节点的子节点certificate用于配置传输层加密所使用的证书文件的路径和密码。&lt;/p&gt;&#xD;
&lt;p&gt;注意，传输层加密当前只在同步模式下被支持，所以此处server节点的mode属性值必须为"Sync"。&lt;/p&gt;&#xD;
&lt;p&gt;这样，SuperSocket就为所有连接的客户端启用了TLS加密传输。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jzywh/aggbug/2048091.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jzywh/archive/2011/05/16/2048091.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/jzywh/archive/2011/05/15/2046783.html</id><title type="text">SuperSocket系列文档(15) 在SuperSocket中启用内置Flash/Silverlight策略服务器</title><summary type="text">SuperSocket内置了支持Flash和Silverlight的客户端的Socket策略服务器，其实现代码在SuperSocket.Facility.dll这个assembly之中。所以要启用策略服务器，首先要保证SuperSocket.Facility.dll存在于SuperSocket运行目录，然后在配置文件中增加相关的节点即可。Flash策略服务器&amp;lt;socketServer&amp;gt; &amp;lt;servers&amp;gt; &amp;lt;server name=&amp;quot;FlashPolicyServer&amp;quot; serviceName=&amp;quot;FlashPolicyService&amp;</summary><published>2011-05-15T02:55:00Z</published><updated>2011-05-15T02:55:00Z</updated><author><name>江大鱼</name><uri>http://www.cnblogs.com/jzywh/</uri></author><link rel="alternate" href="http://www.cnblogs.com/jzywh/archive/2011/05/15/2046783.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/jzywh/archive/2011/05/15/2046783.html"/><content type="html">&lt;p&gt;SuperSocket内置了支持Flash和Silverlight的客户端的Socket策略服务器，其实现代码在&lt;/p&gt;&#xD;
&lt;p&gt;SuperSocket.Facility.dll这个assembly之中。所以要启用策略服务器，首先要保证SuperSocket.Facility.dll存在于SuperSocket运行目录，然后在配置文件中增加相关的节点即可。&lt;/p&gt;&#xD;
&lt;p&gt;Flash策略服务器&lt;/p&gt;&#xD;
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 260px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;&#xD;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;socketServer&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;servers&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;server&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="FlashPolicyServer"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;serviceName&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="FlashPolicyService"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;ip&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Any"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;port&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="843"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;mode&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Async"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;receiveBufferSize&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="32"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;maxConnectionNumber&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="100"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;policyFile&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Policy\flash.xml"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;clearIdleSession&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="true"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;server&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;servers&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;services&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;service&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="FlashPolicyService"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="SuperSocket.Facility.PolicyServer.FlashPolicyServer, SuperSocket.Facility"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;services&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;socketServer&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&#xD;
&lt;p&gt;Silverlight策略服务器&lt;/p&gt;&#xD;
&lt;div id="codeSnippetWrapper" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; width: 97.5%; font-family: 'Courier New', courier, monospace; direction: ltr; max-height: 300px; font-size: 8pt; overflow: auto; cursor: text; border: silver 1px solid; padding: 4px;"&gt;&#xD;
&lt;div id="codeSnippet" style="text-align: left; line-height: 12pt; background-color: #f4f4f4; width: 100%; font-family: 'Courier New', courier, monospace; direction: ltr; color: black; font-size: 8pt; overflow: visible; border-style: none; padding: 0px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;socketServer&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;servers&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;server&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="SilverlightPolicyServer"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;serviceName&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="SilverlightPolicyService"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;ip&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Any"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;port&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="943"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;mode&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Async"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;receiveBufferSize&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="32"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;maxConnectionNumber&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="100"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;policyFile&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="Policy\silverlight.xml"&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #ff0000;"&gt;clearIdleSession&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="true"&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;server&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;servers&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;services&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;service&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;name&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="SilverlightPolicyService"&lt;/span&gt; &lt;span style="color: #ff0000;"&gt;type&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;="SuperSocket.Facility.PolicyServer.SilverlightPolicyServer, SuperSocket.Facility"&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;services&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;socketServer&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;!--CRLF--&gt;&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;请注意server配置节点中，policyFile属性是你的策略文件的存放路径。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/jzywh/aggbug/2046783.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jzywh/archive/2011/05/15/2046783.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
