
Dmitry
16.10.2018
20:25:28
TIME_WAIT - это закрытые уже соединения

Время
16.10.2018
20:25:28
если потоков скажем 100, то это будет в разы медленее идти всё. но будет.

Dmitry
16.10.2018
20:25:53
по идее TIME_WAIT - это между тем, как соединение закрылось и тем, как ты сказал curl_close

Время
16.10.2018
20:26:24

Google

Pavel
16.10.2018
20:26:31
если ходить на низкий уровень то time_wait это также время до сборки мусора

Время
16.10.2018
20:26:39
а по факту сокеты не забивают

Pavel
16.10.2018
20:26:43
Если она у тебя не случилась или протекло что, то сокет может так и висеть

Dmitry
16.10.2018
20:26:43
ядром?

Pavel
16.10.2018
20:27:14

Dmitry
16.10.2018
20:27:53
мм... курл уже сказал ядру close на сокет, сборка мусора уже не должна влиять на сокеты ядра

Pavel
16.10.2018
20:27:54
а может быть и curl библиотекой, если там какой-то свой пул сделан
Можешь номер сокета логировать

Время
16.10.2018
20:29:53
и замерить время сколько он после закрытия висит
я для чистоты эксперемента переставил ось, с убунты на центось, возможно там проблема. хз

Dmitry
16.10.2018
20:31:50
кстати, попробуй CURLOPT_FORBID_REUSE = true

Google

Dmitry
16.10.2018
20:32:18
возможно курл не закрывает сокеты что бы реюзать их, это в принципе нормально

Pavel
16.10.2018
20:33:03
божечки сколько же проблем когда пытаешься заюзать пшп не по назначению ) Уже бы давно свой парсер на go написал или c++

Dmitry
16.10.2018
20:33:40
написание на go не даст автоматически знания, как работает tcp стек

Pavel
16.10.2018
20:34:06
Ну там хотя бы все инструменты наружу торчат, и наверняка можно будет номер сокета увидеть
А еще наплодить кучу горутин не парясь

Dmitry
16.10.2018
20:34:25
что такое номер сокета? ;)

Pavel
16.10.2018
20:35:11
Это число int которое возвращает функция создания сокета из ядра же

Dmitry
16.10.2018
20:44:56
ах, ну это можно и в proc глянуть, только толку то

Pavel
16.10.2018
20:51:28
Так то что надо изнутри приложения залогировать номера сокетов и посмотреть, какие из них зависают и есть ли какая-то закономерность
Может там не все висят а только какие-то определенные..


Gregory
17.10.2018
01:37:38
Доброго времени суток!
Прошу помочь разобраться:
Хочу, чтобы при создании экземпляра класса происходило подключение к БД, и в дальнейшем, работа с данной БД из методов класса.
Однако после того, как объект БД был инициализирован в конструкторе, в других функциях переменная уже ничего не содержит.
Ниже код:
class user {
//Параметры подключения к БД
private $sdb_host = 'localhost';
private $sdb_name = 'test';
private $sdb_user = 'root';
private $sdb_password = '***';
public function __construct() {
$sdb = new mysqli($sdb_host, $sdb_name, $sdb_user, $sdb_password);
if ($sdb->connect_error) {
die($sdb->connect_error . " PIZDETS");
}
}
function test() {
var_dump($sdb);
}
}
Вызов
$user = new user;
$user ->test();
дает значение NULL.
Как правильно реализовать такое взаимодействие?
Спасибо!
Если изменить код на
function test() {
var_dump($this->$sdb);
}
то сервак выдает ошибку 500 с описанием:
PHP Fatal error: Cannot access empty property in *строка var_dump($this->$sdb);*


Дмитрий
17.10.2018
01:46:17
Привет, чтобы использовать какой то объект или переменную из других методов класса, необходимо её присвоить к свойству этого класса. В php это делается через ключевое слово $this. Таким образом нужно объявить свойство private $sdb; после этого в конструкторе присвоить свойству объект подключения к БД $this->sdb=new mysqli(...); Далее в других методах можно обращаться к $this->sdb, как к подключению к БД
еще советую сразу переменные называть camelCase типа private $sdbHost, private $sdbName. И классы называть с большой буквы

Gregory
17.10.2018
01:57:43


Дмитрий
17.10.2018
01:59:21
Если прочитать внимательней, то видно как я показал присваивание $this->sdb=new mysqli(...); при обращении к свойству объекта я не указывал $ перед его именем sdb
чего и вам советую ?

Gregory
17.10.2018
02:01:10
Прошу прощения за глупость:) Мог бы и сам догадаться...

Дмитрий
17.10.2018
02:01:53
ничего) пока глаз не привык к таким штукам и не цепляется за них в коде)

Gregory
17.10.2018
02:02:23
Получается, что когда я обращаюсь к любому свойству класса - я ставлю $this-> и имя свойства, без $

Google

Дмитрий
17.10.2018
02:02:43
да, так точно

Gregory
17.10.2018
02:03:12
Иначе идентификатор рассматривается не как свойство класса, а как локальная для метода переменная. Я правильно понимаю?

Дмитрий
17.10.2018
02:05:04

Gregory
17.10.2018
02:05:36
я прям чувстсвую, как над головой засветился значок LevelUp'а

Алексей
17.10.2018
02:05:51
Раньше в PhpStorm создавал файлы по пути файла в коде, если файла прописаного в коде не существует по alt + enter можно было его создать. Теперь там нет этого. Кто знает, что я выключил в настройках или это новая версия такая?

Дмитрий
17.10.2018
02:07:57
прикольная штука) не пробовал даже так))

Время
17.10.2018
07:55:56
Подскажите такой момент, curl в php подходит для многопоточных соединений, или же лучше использовать сокеты под это дело? Если речь идёт о 500 потоках и выше.

Бэлигто
17.10.2018
07:58:59
ghbdtn
привет

ррр
17.10.2018
07:59:20
ku

Бэлигто
17.10.2018
07:59:40
ты программист?

Admin
ERROR: S client not available

ррр
17.10.2018
07:59:55
учусь тип

Бэлигто
17.10.2018
08:00:17
я тоже платных курсах?
ютубом?
учишся?

dypa
17.10.2018
08:35:04

Время
17.10.2018
08:35:54
подходит
То есть совершенно не важно на чем многопоточность реализовывать? А то некоторые имеют мнение, что курл для многопоточных задач не подходит, мол глючный, а сокеты лучше

dypa
17.10.2018
08:38:06
покажи код уже, гадать скучно

Google

dypa
17.10.2018
08:40:40
@radonezh_ru протести https://github.com/dypa/phpmulticurl

Время
17.10.2018
08:42:07
покажи код уже, гадать скучно
https://pastebin.com/NUT6U41M
вот мой чудо код, если сможете найти в нем проблему, которая забивает соединения, буду безумно рад.
Вот этот скрипт я тупо запускаю 500 раз, из разных директорий, и рядом со скриптом своя база доменов которую он и обрабатывает.

Сергей З.
17.10.2018
08:57:25
if(curl_errno($ch)) { return 'debug_curl_err: '.curl_errno($ch).' - '.curl_error($ch); }
curl_close($ch); - если ошибка, то не закроет?
может return заменить на какой-то logger->log(). потом curl_close b потом return?

Время
17.10.2018
09:01:27
как я так мог оподливиться...
curl_close($ch); не выполняется, именно поэтому соединения накапливаются стало быть?

Сергей З.
17.10.2018
09:07:37
та сам так часто "промазываю" ? Хорошо, если моможет. Скорее всего оно...

Время
17.10.2018
09:08:56
Ещё вопрос такой, тут человек советует один раз инициировать курл в самом начале скрипта ДО цикла $ch = curl_init(); а после цикла закрывать curl_close($ch);
хорошая ли это идея, или лучше так не делать?

Vitaliy Nameless
17.10.2018
10:24:57
зря

Бэлигто
17.10.2018
12:03:03
привет
профессинал появится скоро я не профи
я сам застрял
пойду учить js