Задать вопрос
  • SockJS, node.js, а что если php не успеет?

    avalak
    @avalak
    Поскольку WebSockets у вас используется в одном направлении разницы с SSE по сути нет. Кстати, почему от SSE отказались?

    node.js в текущей схеме бесполезен. От того что php будет долбить запросами node.js а не браузер лучше не станет + у вас образовалась лишняя сущность.

    лучше php => redis pub/sub => nodejs / tornado => ws / sse

    setInterval использовать не рекомендуют. setTimeout лучше.
    Ответ написан
    5 комментариев
  • SockJS, node.js, а что если php не успеет?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    А что будет если не успеет JS? Из описанного вами, издержки на доставку данных будут в десятки раз привышать издрержки на вычисления. Для начала стоит понять что setInterval не гарантирует того, что функция будет вызвана именно через одну секунду, там тоже будут свои флюктуации в силу однопоточности JS. Как с этим бороться, сходу не подскажу, все зависит от логики приложения.

    10 000 одновременных запросов к серверу (именно отдельных запросов, а не через WebSockets) могут положить небольшой сервер. Для этого существует нагрузочное тестирование.

    TCP гарантирует отсутствие потери данных, собственно по этому в реалтаймовых штуках TCP используется только в случае, если UDP дает большую потерю пакетов (например UDP трафик режется или что-то в этом духе). То есть когда сервер отправляет пакет, от откладывает его в буфер до подтверждения его получения клиентом. Если сервер в течении определенного времени не получает по ICMP подтверждения о том что пакет был отправлен, он заново начинает отправлять весь буфер. Когда буфер полон - новые пакеты вы отправить уже не можете пока не освободится, насколько я помню, хотя бы половина. В реалтайме же вас не должна смущать ситуация с потерей пакетов (если данные помещаются в один пакет конечно), так как у них не так много времени, что бы нести "актуальные данные". проще послать следующий пакет. чем переотправлять уже не актуальные данные. Но WebSockets не работают с UDP.
    Ответ написан
    5 комментариев
  • Связка sockjs + node.js, есть ли место для php?

    k12th
    @k12th
    console.log(`You're pulling my leg, right?`);
    Это вполне легитимная практика, HTTP такой же протокол для общения между машинами, как и между машинами и людьми.
    Ответ написан
    Комментировать
  • Связка sockjs + node.js, есть ли место для php?

    printf
    @printf
    Ем детей.
    Лучше проксиком по-моему разрулить.
    Ответ написан
    1 комментарий
  • Чем SockJS лучше Socket.IO?

    affka
    @affka
    http://affka.ru
    Я тоже сперва почитал эти жалобы и начал использовать sockjs - работает он действительно стабильнее и имеет множество транспортов, которые может сам подбирать в случае неудачного соединения, особенно полезно при CORS запросах, НО! sockjs может работать только на одном кластере, у него нет хранилища сессий для разных воркеров и серверов, а значит это крах для больших масштабируемых приложений. У socket.io есть возможность подключить RedisStorage для хранения сессий в редисе.
    Ответ написан
    3 комментария
  • Связка sockjs + node.js, есть ли место для php?

    @DDanya
    Это будет наиболее приемлемый вариант.Правда обычно, с PHP на Node.JS.
    Ответ написан
    Комментировать
  • Разработка через тестирование - как не нарушить инкапсуляцию?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ну по хорошему мы не должны покрывать тестами приватные методы, только публичные интерфейсы. Но если очень хочется, то любой приватный метод можно сделать публичным в тестах:
    public function invokeMethod(&$object, $methodName, array $parameters = array())
    {
        $reflection = new \ReflectionClass(get_class($object));
        $method = $reflection->getMethod($methodName);
        $method->setAccessible(true);
    
        return $method->invokeArgs($object, $parameters);
    }


    Тема по поводу того хорошо это или плохо частенько обсуждается, иногда по другому никак.
    Ответ написан
    Комментировать
  • Yii2, как сделать выбор всех статей конкретного тега?

    metamorph
    @metamorph
    В чем проблема-то?
    Sql-документация - по вопросам работы с MANY-TO-MANY
    Yii2-документация - по вопросам работы с RAR (via, viaTable, hasMany, joinWith)
    Ответ написан
    8 комментариев
  • Как правильно получить ответ от сервера после ajax запроса?

    Где вы вычитали этот говно код?...

    - Выше написали - нужно отправлять массив данных, а не просто переменную.
    - Нет проверки, что входящий на сервер запрос это ajax.
    - Много выводов echo, а должен быть один.
    - Нет вывода пустого ("пробельного") запроса при неподходящих данных.
    Ответ написан
    7 комментариев
  • Yii2 - как сделать двойную реляцию?

    metamorph
    @metamorph
    Вообще в документации это подробно написано.
    См. viaTable и via:
    https://github.com/yiisoft/yii2/blob/master/docs/g...
    Ответ написан
    7 комментариев
  • Как упростить работу с событиями и оптимизировать код в JavaScript (jQuery)?

    @mayorovp
    1. Вот тут: onclick="deleteCoord('+coordId+'); return false" лучше бы использовать не инлайн-скрипт, а точно так же повесить обработчик при помощи jquery.

    2. Содержимое модальных диалогов лучше бы хранить не в таком ужасном для редактирования виде, а сразу разместить на странице, добавив display: none в стилях.

    Для отображения такого диалога достаточно изменить пару стилей. Да вы так уже делаете с .load, .responce и .error

    3. В обработчике блока fail лучше бы тоже показать пользователю какое-нибудь сообщение. Замалчивание сетевых проблем - это не круто.

    Кстати, почему блок success в deleteCoord отличается от остальных? Если предусмотреть вывод возможной ошибки еще и тут, то можно сократить код вот так:

    function renderAfterResponce(responce) {
        var checkResponce = jQuery.parseJSON( responce );
                    
        if (typeof checkResponce.error !='undefined') {
            $('.error').html(checkResponce.error).show(300);
        } else {
            renderAll(false,responce);
            $.arcticmodal('close');
        }
    }
    
    ...
    }).success(renderAfterResponce)
    .fail(...


    Или так:
    function addCoordHandlers(d) {
        return d.success(function(responce) {
                    var checkResponce = jQuery.parseJSON( responce );
                    if (typeof checkResponce.error !='undefined') {
                        $('.error').html(checkResponce.error).show(300);
                    }else {
                        renderAll(false,responce);
                        $.arcticmodal('close');
                    }
                })
                .fail(function() {
                    console.log( "error" );
                })
                .done(function() {
                    $('.load').hide();
                });
    }
    
    ...
    
    addCoordHandlers($.ajax({
                    type: 'POST',
                    url:  '/backend/controller.php',
                    data: { 'action':'deleteCoord', 'coordId':coordId}
                }));


    4. Ну и немного придирок к коду.

    Вот эти строчки вообще ничего не делают:
    coordId = typeof coordId   !== 'undefined' ? coordId : false;
    $this   = typeof $this     !== 'undefined' ? $this   : false;


    Вот этот комментарий не соответствует коду:
    // Assign handlers immediately after making the request,
    // and remember the jqXHR object for this request

    Написано, что jqXHR запоминается - а на самом деле он забывается почти сразу же.
    Ответ написан
    2 комментария
  • Хорошие видеоуроки по тестированию ПО?

    HackerX
    @HackerX
    Работаю в компании VOLO - Team Leader
    Лучшие курсы на мой взгляд это курсы от учебного центра "Специалист".
    Тестировщик ПО
    Ответ написан
    2 комментария
  • Какой framework лучше подойдет для новичка, Laravel или YII?

    metamorph
    @metamorph
    1. Yii2
    2. ООП, неймспейсы, SQL и общий здравый смысл.
    Из опыта общения на форумах, есть два основных косяка: использование фреймворка для всего ("подскажите экстеншн, складывающий 2 + 2") и переоценка возможностей фреймворка ("хочу сделать соцсеть, подскажите как"). Их следует избегать.
    3. Имеются в обоих. Просто в некоторых еще не нашли. А в некоторых, допустим, нашли: habrahabr.ru/post/219475
    Ответ написан
    1 комментарий
  • Jquery2, почему не работает получение значения input?

    @rsludge
    1. Покажите html элемента, возможно ошибка в нем
    2. Возможно ваш код выполняется раньше, чем document.ready, попробуйте переписать так:
    $(function() {
    ... // ваш код
    });
    3. У вас во второй строке в консоли почему-то два объекта с одинаковым id, такого быть не должно
    Ответ написан
    Комментировать
  • Как оптимально реализовать теги к статье?

    copist
    @copist
    Empower people to give
    b57a59f53f7d4a85aa7d90e747781777.png

    Предлагаю таблицы article + tag + article_tag
    article - статьи
    tag - метки
    article_tag - метки статей

    + в таблице article в поле tags хранить список тегов в виде текста, чтобы не делать лишний join при выводе всех тегов статьи

    Да, нарушение нормальной формы и избыточность, но опыт показывает, что это быстрее
    Ответ написан
    Комментировать
  • Как оптимально реализовать теги к статье?

    Тут лучше использовать таблицу-коммутатор с полями вида:

    artcile_id | tag_id

    И отдельную таблицу-справочник для тэгов. Ну и выборки делать при помощи JOINов.
    Ответ написан
    Комментировать
  • Как оптимально реализовать теги к статье?

    @daMage
    Если тегов не много можно создать отдельную таблицу с двумя полями: айди статьи и айди тега. Если всё же решите использовать LIKE, то учтите, что запрос LIKE 1 также вернет запись с tags: 11, 111, 121. Так что тут нужно использовать какие-то смежные символы, например писать не LIKE 1, а LIKE ",1,", оборачивая запятыми. Но опять же, лучше создать отдельную бд и join'ами делать запрос.
    Ответ написан
    Комментировать
  • Yii2 rules (валидация данных), почему возникают ошибки с валидацией?

    metamorph
    @metamorph
    1. Пропишите метасимвол начала строки, иначе регулярка будет срабатывать на символы в конце.
    И точку экранируйте :)
    2. включите validateOnType
    Ответ написан
  • Yii2 почему нумерация пагинации отстает на 1 страницу?

    Remmi
    @Remmi
    Не могу сказать, что моё предположение совершенно точное, но попробую объяснить.

    В программировании счёт ведётся от нуля.

    Варианта два:
    1. Перестроить мозги на счёт от нуля, и прописать базовую страницу не 1, а 0, и для вывода на клиенте прибавлять единицу (чтобы люди видели не страницу №0, а обычную страницу №1).
    2. Ничего не перестраивать, при вызове элемента в коде отнимать единицу (от $page) - и больше ничего не трогать. Дальше смотреть по тому, как будет выводиться на клиент.
    Ответ написан
    1 комментарий
  • Yii2 GridView, как изменить вид поиска и добавить свою возможность?

    1) вы можете по любому модифицировать gridview, унаследовавшись, и дописать свои js-скрипты

    2) вкратце - непроблема (GridView + ModelSearch). Делаете фильтр, в ModelSearch переменную добавляете, в методе поиска эту переменную обрабатываете.

    3) делаете в любом месте, религиозно вам подходящем (логично, что это будет контроллер статей), экшн с аргументом $user_id и отдавайте в нем список статей.
    Ответ написан
    Комментировать