我正在用c.net开发一个socket服务器。我正在使用SocketAsyncEventArgs类提供的异步模型,因为它必须是高性能服务器才能在短时间内支持许多连接。接下来,我想确保
客户机和服务器,我想我可以使用ssl。
在socketasynceventargs模型中有没有使用ssl的方法?我知道.NET有sslstream类用于SSL安全,但我需要使用SocketAsyncEventArgs来获得高性能。
不在服务器代码中实现ssl,就可以在上层使用ssl吗?
提前谢谢。
最佳答案
不知道是否有人再关心,因为这是如此古老,但我需要做的只是这一周,无法找到任何东西在互联网上满足我的需要。也许框架里有新的东西,我找不到…不管怎样,我会发布源代码,但是因为我是为我的公司写的,而且他们往往不赞成,所以我将概述我采取的方法:
由于sslstream在构造函数中接受一个流,所以我实现了自己的流子类型,其中包含一个用于读取的底层memorystream和另一个用于写入的memorystream。我还将tcpclient传递给这个对象。
我使用tcpclient进行握手以设置ssl连接。根据使用方式对服务器或客户端进行身份验证后,我将使用两个memoryStream进行sslstream读/写。
因此,对于异步写入,我首先将有效负载写入sslstream,该sslstream用加密数据填充要写入的memoryStream。使用来自memoryStream的加密数据,填充socketAsyncEventArgs缓冲区并调用tcpclient sendaync方法。对于reads来说,情况恰恰相反。
我不能说这样移动数据让我特别兴奋,但只要你不让你的memoryBuffer对象不断地重新分配,这就不是性能问题。至少这样,我可以只使用框架和自己的代码,而不依赖第三方软件。