Подключен модуль
https://github.com/TooTallNate/node-socks-proxy-agent . Несмотря на то что написано Build Status Failing, модуль работает исправно на wss
Вот ошибка, которая стопорит скрипт. Мне нужно, чтоб скрипт продолжал работать:
events.js:72
throw er; // Unhandled 'error' event
^
Error: Connection Timed Out
at Socket.onTimeout (/home/admin/web/*/public_html/node_modules/socks-proxy-agent/node_modules/socks/lib/socks-client.js:55:20)
at Socket.g (events.js:180:16)
at Socket.EventEmitter.emit (events.js:92:17)
at Socket._onTimeout (net.js:327:8)
at Timer.unrefTimeout [as ontimeout] (timers.js:412:13)
Вот те самые строки из socks-client.js:55 (finish(new Error 55 строка))
exports.createConnection = function (options, callback) {
var socket = new net.Socket(), finished = false, buff = new SmartBuffer();
// Defaults
options.timeout = options.timeout || 10000;
options.proxy.command = commandFromString(options.proxy.command);
options.proxy.userid = options.proxy.userid || "";
var auth = options.proxy.authentication || {};
auth.username = auth.username || "";
auth.password = auth.password || "";
options.proxy.authentication = auth;
// Connect & negotiation timeout
function onTimeout() {
finish(new Error("Connection Timed Out"), socket, null, callback);
}
socket.setTimeout(options.timeout, onTimeout);
// Socket events
socket.once('close', function () {
finish(new Error("Socket Closed"), socket, null, callback);
});
socket.once('error', function (err) {
});
Тут надо читать медленно:
Т.к соединений в WS очень много (700 подключений через разные socks proxy сервера), безусловно где-то будет ошибка таймаута. Сначала такая же ошибка выпадала при ws.on close. Я пересоздавал (делал реконект). Убрал я её пересозданием самого объекта agent от socks-proxy-agent и она пропала. Выпала снова в тот момент, когда начал поднимать более 700 соединений. Методом тыка пришел к выводу, что один из socks proxy просто в таймаут не ответил. Но в итоге стопорится весь скрипт.
ADD:
При изменении timeout до 100000 (100 секунд я так понимаю)
events.js:72
throw er; // Unhandled 'error' event
^
Error: socket hang up
at SecurePair.error (tls.js:1013:23)
at EncryptedStream.CryptoStream._done (tls.js:705:22)
at CleartextStream.read [as _read] (tls.js:496:24)
at CleartextStream.Readable.read (_stream_readable.js:320:10)
at EncryptedStream.onCryptoStreamFinish (tls.js:301:47)
at EncryptedStream.g (events.js:180:16)
at EncryptedStream.EventEmitter.emit (events.js:92:17)
at finishMaybe (_stream_writable.js:356:12)
at endWritable (_stream_writable.js:363:3)
at EncryptedStream.Writable.end (_stream_writable.js:341:5)
ADD2:
Нашел файл по адресу: /node_modules/casperjs/modules/events.js (причем тут casperjs я так и не понял, хотя папка node_modules). И там как раз 72 строка:
EventEmitter.prototype.emit = function emit() {
var type = arguments[0];
// If there is no 'error' event listener then throw.
if (type === 'error') {
if (!this._events || !this._events.error ||
(isArray(this._events.error) && !this._events.error.length))
{
if (arguments[1] instanceof Error) {
throw arguments[1]; // Unhandled 'error' event
} else {
throw new CasperError("Uncaught, unspecified 'error' event.");
}
}
}
if (!this._events) return false;
var handler = this._events[type];
if (!handler) return false;
if (typeof handler === 'function') {
try {
switch (arguments.length) {
// fast cases
case 1:
handler.call(this);
break;
case 2:
handler.call(this, arguments[1]);
break;
case 3:
handler.call(this, arguments[1], arguments[2]);
break;
// slower
default:
var l = arguments.length;
var args = new Array(l - 1);
for (var i = 1; i < l; i++) args[i - 1] = arguments[i];
handler.apply(this, args);
}
} catch (err) {
this.emit('event.error', err);
}
return true;
ADD
Error("Connection Timed Out"), socket, null, callback); вот эту строку заменил на просто console.log. Выпадает 8-9 строк таких, а потом выпадает Error: socket hang up. Где эту ошибку заблокировать я не нашел. У меня нет файла в системе tls.js. Пипец. Бесит.