Randy Abernethy created THRIFT-2398: ---------------------------------------
Summary: Improve Node Server Library Key: THRIFT-2398 URL: https://issues.apache.org/jira/browse/THRIFT-2398 Project: Thrift Issue Type: Improvement Components: Node.js - Library Affects Versions: 0.9.2 Environment: all Reporter: Randy Abernethy Improve Node Server Library ======================= Background ---------------- In the last 7 months Node.js has gone from one server constructor: • createServer() to seven, adding: • createSSLServer() • createMultiplexServer() • createMultiplexSSLServer() • createHttpServer() • createHttpsSSLServer() • createWebServer() there are really only two implementations: • createMultiplexSSLServer() • createWebServer() Several of these servers have undocumented options and share options objects with other libraries. Proposal ------------- 1. Remove all of the create signatures except these three: o createServer() o createMultiplexServer() o createWebServer() with createServer() implemented by createMultiplexServer(). All signatures will support optional multiplexing and optional SSL/TLS. Eliminate no present functionality and maintain signature compatibility in the three signatures preserved. 2. Document and standardize all server options and parameters with notes describing any deprecated features being preserved for backward compatibility. Motivation ------------- The dispersion of create methods makes it harder for developers to know which server to use and leads to diffusion in the way that options and features are provided. This also complicates testing. Reducing the servers to the two currently supported end point transports (TCP and HTTP) will enforce standardization and simplify adoption. Now is the time to address these issues before the new create signatures show up in a released version. Approach to Options ---------------------------- Presently the non-web server options objects may have transport and protocol properties. Undocumented key and cert properties are used to enable the options object to be passed to the Node.js tls and https createServer() methods. This approach requires Apache Thrift options to be visible to the Node.js library methods and vice versa. A better approach might be to place Node.js tls options in a tlsOptions object which is itself a property of the server options object. This will allow any tlsOptions to be passed through to Node.js without concerns for conflicts on the Node.js or Apache Thrift side, now or in the future. The presence of a tlsOptions object can also be used to enable SSL/TLS in the two server implementations rather than having separate functions. Would like to know what others think about this. -- This message was sent by Atlassian JIRA (v6.2#6252)