Neko hxssl 不适用于 HTTPS

Neko hxssl not working for HTTPS

我正在重写一个更大的项目,其中已经有相当大的代码库是用 neko 编写的。该项目的一个方面是一个数据抓取器,它将(在高峰时段)打开 100 多个连接到 WebSockets 服务器。最初,这是使用 WebSockets npm 包通过大量 nodejs 进程 运行 完成的。问题是这有点不可靠,并且会大大降低机器 运行 这些进程的速度。我希望在单个 neko 进程中使用 Threads 运行 解决这个问题。

但是,我 运行 遇到了一个我没想到的问题——haxe 中对 SSL/TLS 的非常尴尬的支持(或缺乏)。据我了解,唯一可用的本机 OpenSSL 包装器是 hxssl haxelib。我安装了它,但它仍然不能与 WebSockets 一起使用,所以我将问题追溯到一个更简单的案例——只有一个 HTTPS 连接,如下所示:

import haxe.Http;

class Main {
    public static function main(){
        var http = new Http("https://www.facebook.com/");
        http.certFolder = 'certs';
        http.certFile = 'certs/ca-certificates.crt';

        http.setHeader("Accept", "text/html,application/xhtml+xml,application/xml");
        http.setHeader("Accept-Language", "en-US");
        http.setHeader("Cache-Control", "max-age=0");
        http.setHeader("Connection", "close");
        http.setHeader("DNT", "1");
        http.setHeader("Upgrade-Insecure-Requests", "1");
        http.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36");

        http.onData = function(data:String){
            Sys.println("Data: " + data.substr(0, 50) + " ...");
        }
        http.onError = function(msg:String){
            Sys.println("Error: " + msg);
        }
        http.onStatus = function(status:Int){
            Sys.println("Status: " + status);
        }
        http.request(false);
    }
}

问题是 有时 这个输出很简单:

Status: 200
Error: Custom((1) : An unknown error has occurred.)

最糟糕的部分是 运行发生这种情况时的惯性。有时它会连续发生多次,即使我不重建项目也是如此。我 运行 目前在 OS X 机器上。

certs 文件夹中充满了从最新 Ubuntu 服务器上的证书复制的证书。我试过不使用 certFoldercertFile 行,但是结果几乎相同。

有什么可能导致这种情况的想法吗?编写一个更好的 OpenSSL 包装器/本机实现可能是不可能的,我有点时间紧迫。我尝试了上面的 cpp 构建,但使用 Sockets 代码失败了,我也不确定我是否想走那条路。

或许您可以试用即将发布的 3.3 版本的 RC,它内置了 Neko/Hxcpp 对 SSL/TLS 的支持。