mirror of https://github.com/tp4a/teleport
28 lines
1.4 KiB
Markdown
28 lines
1.4 KiB
Markdown
![]() |
# IDEA
|
|||
|
|
|||
|
简化core服务,使之不用直接访问数据库
|
|||
|
|
|||
|
优点:
|
|||
|
|
|||
|
- 简化core服务代码,不用直接访问数据库,C++访问数据库比python访问数据库代码复杂度更高。
|
|||
|
- 通过web提供的rpc接口来访问数据库,限定数据库访问点仅通过web进行,容易做多类型的数据库的支持,比如从sqlite迁移到mysql。
|
|||
|
|
|||
|
缺点:
|
|||
|
|
|||
|
- 需要web提供特别的rpc接口,web服务和core服务的交互增加了。
|
|||
|
|
|||
|
|
|||
|
|
|||
|
目前的core服务中直接访问数据库,涉及到:
|
|||
|
|
|||
|
- 生成会话ID,需要根据认证ID获取认证信息,可改为web查询数据库,然后将认证信息传递给core服务。
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
|
|||
|
关于会话ID的有效期,现有版本是设置一个引用计数,对于rdp可以使用两次,而ssh只能使用一次,原因是rdp连接时,通常第一次连接用于协商子协议,然后会断开,并立即重连并使用确定好的子协议进行后续操作。
|
|||
|
|
|||
|
改进的方法是:为一个会话ID设置一个标志及一个最后活动时间,会话ID刚生成时标志为false,调用take_session()时设置为true,当连接断开时(或者未能连接成功时)重置为false并更新最后活动时间为当前时间。标志为true时不允许重复take_session(),每次调用take_session()时检查标志为false的回话ID的最后活动时间,如果超过5秒未活动,则删除此会话ID。
|
|||
|
|
|||
|
这样做可以适配各种连接方式。
|