我正在进行更大的项目重写,已经使用neko编写了相当大的代码库。该项目的一个方面是数据刮板,该刮板将(在高峰时段内)开放100多个WebSockets服务器连接。最初,这是使用WebSockets npm包通过运行许多nodejs进程来完成的。问题是,这有点不可靠,并且会使运行这些进程的计算机运行速度大大降低。我希望通过在单个neko进程中运行的线程来解决此问题。
但是,我遇到了一个我没想到的问题–在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服务器上的证书复制的证书。我试过没有certFolder
和certFile
行,但是结果几乎相同。关于什么可能导致此的任何想法?编写一个更好的OpenSSL包装器/本机实现可能是毫无疑问的,我有点时间紧迫。我尝试了上面的cpp构建,但由于Sockets代码而失败,我不确定我是否也想走这条路。
最佳答案
也许您可以尝试即将推出的3.3版本的RC,它具有对SSL / TLS的内置Neko / Hxcpp支持。
关于ssl - Neko hxssl不适用于HTTPS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37590739/