当mod_dbd不支持我的驱动程序时,我该如何在Apache中持久化DB Conn
How should I go about DB Conn persisting in Apache when mod_dbd doesnt support my driver?
我正在使用ODBTP接口从Linux Apache 2到SQL Server。x主机。mod_dbm不支持这个,我需要能够将代码移动到任何支持Apache的主机。
关于我的环境的说明:我使用Apache 2.2.17, c++包装在C中for Apache, ODBTP 1.14, SQL Server 2008。
我已经成功地实现了ODBTP连接,我能够充分使用模块本身内的数据,但是我想要保持连接,而不是连续连接,断开连接,并重新开始为我的应用程序使用本地HTTP调用以JSON格式检索数据。
问题是,我需要在一个环境中部署这个应用程序和模块,在这个环境中,我不相信纯文本编写的应用程序的安全性,以安全地保护数据库凭据。当应用程序通过HTTP连接时,它只提供我的模块在发送到数据库之前解密的加密凭据。
我目前正在为数据库创建一个句柄,并将其存储在模块定义中的关键apr_hash_t表中。应用程序连接后,模块查找应用程序在URL中指定的每个请求的惟一令牌,以查找该应用程序的连接。
哈希键是32位的键,最初是从池中创建的一个char *,并与ODBTP句柄一起作为哈希表中的一行存储。不知怎么的,调用之间的键被修改了,原来的键现在是一个截断的版本。
的例子:1)我从我的应用程序中发出1个调用来启动持久连接。这个作品。2)我从我的应用程序进行3个背靠背调用来执行sql字符串。(/明星/execute_sql/独特/& lt;>/sql/& lt;>) x 3
第一个调用是完美的,我检索数据。下一次调用保存为键的令牌将被截断,并且模块无法找到关联的键。下一次调用令牌将处于与第2次尝试相同的截断状态。
我不确定我是否在覆盖内存?我编写了一个简短的循环函数来输出哈希表的内容,这样我就可以在代码中的每个点上插入这个函数,以找出数据可能已经损坏的地方,但是我的发现没有任何意义。为了找到嵌入在uri中的数据,我必须拆分uri。在这个函数中,我跟踪了内存移动到一行"raw = apr_psprintf(apache->pool,"%s",subject);",如下面的代码所示。
void theRequest::get_exploded_str(char *subject, char *delimiter)
{
// variables
char *raw, *next, *last;
// create the split chars database if not created
loadSDB();
apr_array_clear(x_split_chars);
subject = apr_pstrndup(apache->pool, subject, string(subject).length());
raw = apr_psprintf(apache->pool,"%s", subject);
next = (char*)apr_strtok(raw, delimiter, &last);
while (next)
{
// add next to array
*(char **) apr_array_push(x_split_chars) = apr_pstrdup(apache->pool, next);
// fetch next
next = (char*)apr_strtok(NULL, delimiter, &last);
}
return;
};
它在调用1时工作得很好,但在调用2时就不一样了,因为键被移动了。
任何想法?或者甚至一些关于如何使用APR_RESLIST来更好地完成此任务的想法?
提前感谢!
我发现我不能直接通过应用程序池,而是通过ODBTP库本身。由于它是一个TCP到ODBC的桥接,所以它能够在一定程度上汇集连接,但效率不够高。
由于服务器环境的变化,我放弃了这个任务,转而使用SQLite3作为应用程序数据库。
- 问:通过 Apache Arrow 在 C++ 中将 PARQUET 转换为 JSON?
- 在现有的C++可执行项目CMAKE中构建Apache Arrow
- 问:Apache Arrow 数组生成器不安全追加
- 在 Apache Velocity 模板语言中获取文件目录
- 如何使用 Apache C 模块登录到文件
- 来自iostream或内存缓冲区的Apache Arrow表
- 通过 Apache Qpid 发送用户定义的结构
- 如何在 Linux/Apache 虚拟主机上运行 win32 控制台应用程序?
- 默认缓存何时存储在 Apache Ignite 2.0 中的堆外
- Cpp 未定义引用 'Apache:: thrift:: transport:: TSocket:: TSocket (std:: string const&, int)'
- OSX 上的 Apache Ignite 2.0 C++ 无法编译
- 编译 apache 点燃 c++ 示例
- Apache IGNITE编译ODBC驱动程序错误
- Apache Thrift服务器作为客户端
- Apache HTTPD模块共享内存权限拒绝了错误
- 我可以在Apache Ignite计算中混合使用C++和Java吗?
- Apache Ignite v2.7:无法构建 Linux ODBC 驱动程序 - 内联变量编译错误
- Apache在PHP文件上保持文件锁定,直到关闭
- Apache Thrift C++服务器超时客户端连接
- 当mod_dbd不支持我的驱动程序时,我该如何在Apache中持久化DB Conn