node-ctp是一项开创性的工作,解决了CTP接口与node.js结合的问题,源代码在此:https://github.com/zoohanyoo/node-ctp。
感谢zoohanyoo为此所做的努力,相信这其中有很多个不眠之夜,因为libuv和v8都足够复杂。node-ctp最突出的贡献是给出了node.js主线程与动态链接库so线程之间交互的一种可行的解决方案,目前尚不知道是否有其他更优的方案。
node-ctp不完美的地方是该工具开发于两年前,具备雏形之后没有继续维护,没能跟上node.js快速前进的步伐。这样的后果是当我尝试用最新的node.js编译node-ctp的时候,会得到一系列令人精神崩溃的报错,比如这样:
../src/wrap_trader.h:24:44: error: expected class-name before ‘{‘ token
class WrapTrader : public node::ObjectWrap {
^
还有这样:
../src/wrap_trader.h:30:37: error: ‘Arguments‘ does not name a type
static Handle<Value> Connect(const Arguments& args);
在尝试修改源代码未果后,我决定还原node-ctp当年的开发环境,以此来避免编译时遇到的错误。现在看来,这无疑是十分明智的。
node-ctp依赖的node.js的版本是0.10.26,npm版本是1.4.29,node-gyp版本是1.0.2,都是2014年的古董。幸运的是,这些古董在网上都能够下载到,说明node.js的生态环境是非常健康的,维护者已经知晓用户存在这样的需求。这是一个非常好的信号。node-ctp依赖的centos版本是6.x。
0、准备centos 6.4系统。这个系统需要能够连接到互联网,这是基本要求。
1、node.js的安装过程:
下载node.js的0.10.26版本(感谢淘宝)
./configure
make
make install 需要root权限
make test
2、npm的安装过程:
下载npm的1.4.29版本(感谢Jack Ma老板)
./configure
make
make install 需要root权限
3、node-gyp的安装过程:
首先注册一个淘宝的npm镜像,这样能够加快安装速度
npm config set registry https://registry.npm.taobao.org
npm install -g [email protected] 需要root权限,-g的意思是将node-gyp设为全局命令,可以像node一样直接运行
4、node-ctp的build过程:
首先编辑binding.gyp文件,注意node-ctp中缺失.so文件,建议重新下载ctp api包,并将其路径设置在binding.gyp文件中
node-gyp rebuild --nodedir ~/path/to/node-v0.10.26 此处设置了node.js源代码路径,编译的时候需要node的头文件
5、安装完毕后可以进行基本的测试
为此可在www.simnow.com.cn上申请一个ctp测试账号,并设置密码,这个密码就是ctp的登陆密码。下载一个快期桌面终端,测试账号和密码的有效性。下单时会提示:“下单失败: CTP:该交易席位未连接到交易所”,尚不知原因。
修改trade_confirm.js,填入交易系统tcp地址(simnow提供)、账号、密码、会员号(9999),然后运行:
node trade_confirm.js
观察输出结果。
至此,node-ctp的编译工作完成。
上述工作耗时一天,总体感觉还算顺利,尤其是node的几个老版本工具都非常容易找到,配置过程也很简便,遇到问题在网上能搜到解决方法,这说明node.js的整个生态环境是完备的,用户也很多。目前的认识是,node-ctp完成了最核心的功能,即ctp线程与node线程的通信,其他方面我还需要花时间进一步梳理。
EOF