Neko hxssl不适用于HTTPS

时间:2016-06-02 11:36:56

标签: ssl haxe neko haxelib

我正在进行一个更大的项目重写,已经用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构建,但是套接字代码失败了,我不确定我是否也想走这条路。

1 个答案:

答案 0 :(得分:3)

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