Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (17)

Лучшие ответы пользователя

Все ответы (15)
  • Как грамотно установить и настроить сервер для офиса + Asterisk?

    vistoyn
    @vistoyn
    программист
    Добрый день!
    Попробуйте сборку Elastix. Она содержит в себе уже настроенный Asterisk и веб интерфейс для управления.
    https://ru.wikipedia.org/wiki/Elastix
    Ответ написан
  • AngularJs. Почему ругается на контроллер?

    vistoyn
    @vistoyn
    программист
    Попробуй так:
    var demoApp = angular.module('demoApp', []);
    demoApp.controller('DemoController', function($scope){
    	$scope.name = 'World';
    });

    а в html прописать ng-app='demoApp'

    работает для версии 1.5.5
    Ответ написан
  • Как сделать совместный просмотр и управление файлом двух пользователей?

    vistoyn
    @vistoyn
    программист
    Как идея.
    1) PDF разбивается на сервере на картинки.
    2) Отображается конкретная картинка.
    3) Когда клиент нажимает следующий слайд, отправляется запрос на сервер, а там через websocket всем подключенным клиентам приходит сообщения о том, что слайд сменился. Приходит конкретный номер текущего слайда.
    4) Мышка у всех прячется и показывается виртуальный курсор на сайте (img картинка курсора).
    5) Если модератор двигает курсором, это отслеживается через событие mousemove, на сервер отправляется координаты сдвинутого виртуального курсора, и затем все клиентам рассылается новое смещение курсора.
    6) Клиент получает новую позицию и запускает анимацию движения курсора.

    С картинкой курсора можно играться. Можно сделать так, кто двигает мышкой, тот и управляет виртуальным курсором. Координаты виртуального курсора, должны совпадать с координатами реального, кто двигает. Конечно если двигать начнет другой, то курсор переместится на новое место. Можно плавную анимацию сделать.

    Спрятать курсор можно через CSS cursor: none;

    Есть вебсокеты, а есть еще WebRTC. Это p2p коммуникация в реальном времени. Можно отсылать клиентам json сообщения где находится курсор, кто им управляет и какой номер слайда pdf презентации. Но для WebRTC все равно нужен будет сервер с ajax или вебсокетами.

    Через WebRTC можно сделать видеосвязь.

    Как то так, наверное.
    Ответ написан
  • Как по сети оповестить одного из сотен-тысяч клиентов?

    vistoyn
    @vistoyn
    программист
    RabbitMQ не подойдет. Это для микросервисной архитектуры.
    То что ты говоришь, называется web push уведомлениями.
    Почитай алгоритм как они работают, и сделай также.
    Вроде как есть https://gotify.net/ и клиент под него

    Проблема с вебсокетами в том, что на каждого подключённого клиента, на сервере будет выделяться память. И если много клиентов одновременно будут держать открытые соединения, то может память сервера кончится, и надо будет масштабировать сервер.

    Как вариант можно юзать UDP протокол. Там не тратится память. Но надо будет решить проблему с NAT. NAT на клиенте можно обойти через проброс портов на роутере. Есть даже автоматический проброс портов через UPnP. Но это не везде будет работать. Где не работает, там вебсокеты.

    Как идея второй вариант:
    Если обновления происходят раз в час, или раз в неделю, и задержка в 5-10 минут не критична, то можно следующее решение. Клиент по таймауту раз в несколько минут отправляет post запрос (чтобы не кэшировался), где будет возвращен timestamp с последней новостью. Можно даже создать 100к txt статических файлов для каждого клиента и раздавать их через nginx или CDN. А для того чтобы "пнуть клиента", достаточно в txt файл записать новый timestamp.
    Ответ написан
  • Как лучше хранить crontime в базе данных?

    vistoyn
    @vistoyn
    программист
    Используйте библиотеку mtdowling/cron-expression.
    Она умеет анализировать интервалы в стиле крон.

    Идея такая:
    1. Нужно вытащить из базы все записи.
    2. Для каждой записи узнать следующее время запуска.
    3. Если оно совпадает с текущей минутой, то выполнить задачу.
    Ответ написан

Лучшие вопросы пользователя

Все вопросы (2)