管理网络通信
正如网络通信页面中所解释的那样,SmartEDB 7.1.1795 版本及更高版本允许使用 IPv6 地址协议来指定节点地址。以下部分描述了对于将使用了 SmartEDB 早期版本中网络通信的应用程序移植的开发人员而言可能重要的问题。安全措施部分介绍了如何为网络通信启用密码保护或 SSL 安全。
IPv4 与 IPv6 的问题
SQL 服务器的端口可以定义为“<主机>:<端口>”(或者像以前一样仅定义为“<端口>”)。在“<主机>:<端口>”这种形式中,“<主机>”部分定义了要绑定监听套接字的接口地址。例如,以下命令行可用于在本地主机上监听来自 IPv6 客户端的连接:
./xsql -size 100m -p [::1]:10000
而下面这个示例命令行可用于监听来自任何地方的 IPv6 或 IPv4 客户端(由于双协议栈)的连接:
./xsql -size 100m -p [::]:10000
在 xSQL 配置文件中的 SQL 端口规范允许同样的功能。例如,以下都是有效的端口规范:
sql_port : 5000,
sql_port : "127.0.0.1:5000",
sql_port : "[::1]:5000",
安全措施
有关远程 SQL 连接的密码保护和 SSL 安全的详细信息,请参阅 xSQL 安全措施页面。(在 Mac OS 上使用 SSL 的开发人员,请参阅《C 语言网络通信管理》第 页上的“关于 Mac OS X 的 mcossl 的说明”,以获取重要的构建和使用信息。)
限制传入连接
在 SqlServer(const OpenParameters ¶ms) 方法的 OpenParameters 结构中新增了一个参数 maxWaitListLength。该参数限制了 SQL 服务器中来自客户端的传入网络连接列表的长度。只有在现有(已连接)客户端断开连接后,才会处理此列表中的元素。该限制可防止列表无限制地增长并浪费服务器资源(套接字)。maxWaitListLength 的默认值定义为 db_max_connections / 2,因此已连接客户端的最大数量不会超过(当前正在处理的连接数)+(db_max_connections / 2)。
C++: SqlServer::OpenParameters::maxWaitListLength
.NET Framework : SqlServer.OpenParameters.maxWaitListLength
JNI: SqlServer.OpenParameters.maxWaitListLength
Python: SqlServer(max_waitlist_length=...)
xsql: sql_servers[].max_waitlist_length
On the client side, the RemoteEngine.open()
and the DistributedSqlEngine.open()
methods take an extra parameter RsqlOpenError *errCode = 0
that reports the reason to the client application for the unsuccessful attempt to connect
enum RsqlOpenError {
RSQL_OPEN_NO_ERROR = 0,
RSQL_OPEN_CONNECT_FAILED,
RSQL_OPEN_SEND_HELLO_ERROR,
RSQL_OPEN_REJECTED_BY_SERVER,
RSQL_OPEN_PROTOCOL_ERROR
};