Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssl 事件驱动TLS服务器_Ssl_Event Driven - Fatal编程技术网

Ssl 事件驱动TLS服务器

Ssl 事件驱动TLS服务器,ssl,event-driven,Ssl,Event Driven,我正在开发一个服务器端软件,它通过TLS(通过TCP)接收来自客户端的请求。为了获得更好的性能和用户体验,我希望避免每次请求都进行完全握手。理想情况下,客户机只需与服务器建立数小时的TLS会话,尽管大部分时间会话可能处于空闲状态。同时,还需要高吞吐量 一个简单的方法是为每个会话指定一个线程,并使用一个大的线程池来提高吞吐量。但是,如果我想要,比如说,10万个并发会话,这种方法的性能开销可能是巨大的 高吞吐量的需求导致了事件驱动模型。其思想是当连接空闲时(即底层套接字上没有IO事件),TLS服务器

我正在开发一个服务器端软件,它通过TLS(通过TCP)接收来自客户端的请求。为了获得更好的性能和用户体验,我希望避免每次请求都进行完全握手。理想情况下,客户机只需与服务器建立数小时的TLS会话,尽管大部分时间会话可能处于空闲状态。同时,还需要高吞吐量

一个简单的方法是为每个会话指定一个线程,并使用一个大的线程池来提高吞吐量。但是,如果我想要,比如说,10万个并发会话,这种方法的性能开销可能是巨大的

高吞吐量的需求导致了事件驱动模型。其思想是当连接空闲时(即底层套接字上没有IO事件),TLS服务器可以切换上下文以服务于其他连接。挑战之一是在套接字空闲时冻结整个TLS会话上下文,并在套接字变得可读/写时检索它


我想知道TLS是否已经支持这种功能?缓存和票证似乎都相关。另外,我想知道人们是否已经实现了这个想法。

您正在谈论的是SSL会话恢复,它已经在OpenSSL和JSSE中实现了,毫无疑问,您将要使用的所有其他SSL API中都实现了。SSL会话已在连接中存活。所以你没有办法得到这个


关于“冻结SSL会话上下文”的部分完全没有意义。

好吧,只是OpenSSL不是事件驱动的。这就是为什么我要编写自己的事件驱动TLS服务器。如果你认为这很简单,也许你可以告诉我当套接字接收字节时应该怎么做?我想我需要查找与套接字关联的SSL会话并恢复会话上下文(例如,通过
SSL\u set\u session
),然后正确处理数据。您是否认为这些都不是必需的?OpenSSL可以与非阻塞I/O和
select()
结合使用,这使其成为事件驱动的。正如我已经说过的,你的建议都不是必需的。你能给我举个例子吗?如果
select()
显示多个客户端套接字是可读的,我仍然需要用相应的
SSL*
读取它们中的每一个,因此我需要以某种方式维护一个套接字到
SSL*
映射,不是吗?我缺少一些基本的东西吗?是的,当然你需要SSL套接字,没有人说过任何不同的话。我怀疑你确实错过了一些基本的东西。上有大量示例代码。请准确回答什么问题?我已经给了你几个答案,在这里我看不到任何我还没有回答的问题。在我看来,您需要首先学习如何编写服务器,这太宽泛了,然后学习SSL API,这也太宽泛了。