Kategorie Linux server


Websocket, PHP a real-time komunikace

Po delší době jsem se rozhodl publikovat krátký článek, který se bude možná hodit těm, kdo vyvíjíte weby v PHP a chtěli byste na nich využít obousměrnou komunikaci přes websocket, což na běžných hostingových programech pro PHP projekty není úplně jednoduché.

Pokud programujete dlouhé roky v PHP, asi se vám nechce přecházet na jiné populární jazyky jen pro to, abyste nasadili do projektu novou funkcionalitu, jakou je real-time komunikace přes websocket. A ani to není potřeba, protože jsou řešení, která dokáží nedostatky PHP vyřešit.

Websocket jako služba (IaaS)

Řešením, jak nasadit websocket komunikaci na web v PHP, aniž byste se učili nové programovací jazyky nebo si instalovali vlastní virtuální server s podporou websocketů, je využití infrastruktury jako služby (insfrastructure as a service).

IaaS vám poskytne vše potřebné pro navázání a udržování otevřených websocket spojení s klienty, kteří mají aktuálně zobrazený váš web, nebo spuštěnou aplikaci. Můžete s nimi tedy komunikovat v reálném čase a odesílat klientům data do jejich zařízení, aniž by si o ně požádali, na rozdíl od klasického HTTP nebo AJAX požadavku.

Dost řečí, více činů, jdeme na to

Nemá smysl popisovat věci, které už někdo popsal. Pokud chcete víc informací, je dobré se podívat přímo na služby, a to hned od několika poskytovatelů. Hlavní parametry pro porovnání služeb jsou počet konkurenčních spojení (aktuálně připojených klientů) a počet i velikost zpráv odesílaných před websocket.

Služby pro real-time komunikaci přes websocket

  • WebSocket.cz - český projekt mého kamaráda, doporučuju zkusit
  • Mercure.rocks - Mercure real-time API and websocket communication
  • - Powering realtime experiences for mobile and web
  • - AWS WebSocket APIs in API Gateway
  • - Pie Socket WebSocket Servers

Poskytovatelů websocket IaaS je samozřejmě víc, včetně cloudů jako Google, Azure a další. Stačí pohledat na google výrazy jako "websocket IaaS", "rest API to websocket" a pod. Snad vám podobné služby usnadní integraci websocketů do projektů v PHP, které se vám nechce přepisovat, protože jinak fungují pěkně.

Wed, 20. April 2022 - před 100 týdnyAnonymní­ uživatel

Gentoo, Python a utržené sluchátko

Dnes mi Gentoo doporučilo, že bych měl spustit # emerge --depclean Ale bohužel portage moc chytrá nebyla, tak si odinstalovala i Python, ve kterém je sama napsaná. Takže mi pak příkazy jako # emerge --sync vůbec "nic nevracely".
Musel jsem tedy ručně zkompilovat python : # cd /tmp # tar xjf /usr/portage/distfiles/Python-2.6.6.tar.bz2 # cd Python-2.6.6 # ./configure --with-fpectl --infodir=/usr/share/info/ --mandir=/usr/share/man # make # make install prefix=/usr No a když nám portage už funguje, tak si python ještě jednou "pěkně čistě" emergnem, aby jsme zohlednily use flagy a aby systém věděl, že python máme: # emerge python Portage očividně instaluje verzi 3.1.3, po instalaci tedy spustíme: # eselect python 2 Třetí možnost je v mém případě python 2.7, protože Python3 ještě není doporučovaný. Dále necháme python si opravit "svoje" balíky : # python-updater A na závěr necháme ještě portage zkontrolovat, jestli se něc nepolámalo: # revdep-rebuild

Sat, 14. May 2011 - před 669 týdnyArteal

Gentoo a mpd

Jelikož na gentoo-wiki.com není žádný článek o instalaci mpd, tak jsem se rozhodl si napsat článek,, který bude pokrývat moje potřeby :
  • budu přehrávat mp3 a "do zálohy" si pořídím i podporu ogg
  • líbí se mi možnost z ostatních počítačů v síti přijímat stream skrz PulseAudio
  • jak bonus si nastavím streamování po internetu pomocí Icecast-umpd má vlastní HTTP output, který, když se nastaví na lame encoder funguje kvalitně
Nejdříve si nastavíme požadované USE-flagy pro mpd a emergnem ho :
(Před instalací mám nastavené globální USE flagy alsa a mp3 # echo "media-sound/mpd flac mp3 ogg pulseaudio vorbis lame" >> /etc/portage/package.use # emerge -av mpd Jako závislost bude instalováno pulseaudio, které je závislé na udev a jeho USE flagu extras, takže si nyní správně nastavíme udev... Dále je potřeba nastavit balíku flac USE flag ogg, oboje provedeme a znovu emergujem : # echo "media-libs/flac ogg" >> /etc/portage/package.use # echo "sys-fs/udev extras" >> /etc/portage/package.use # emerge -av mpd

Nastavení mpd

Nyní k samotnému nastavení mpd. Upravíme soubor /etc/mpd.conf: music_directory "/mnt/data/music/mp3" playlist_directory "/var/lib/mpd/playlists" db_file "/var/lib/mpd/mpd.db" log_file "/var/log/mpd/mpd.log" pid_file "/var/run/mpd/mpd.pid" state_file "/var/lib/mpd/state" user "mpd" group "audio" bind_to_address "localhost" #bind_to_address "/var/lib/mpd/socket" log_level "default" input { plugin "curl" } audio_output { type "alsa" type "alsa" name "My ALSA Device" device "hw:0,0" # nepovinne mixer_type "hardware" # nepovinne mixer_control "Master" # nepovinne } audio_output { type "httpd" name "mpd http stream" encoder "lame" # optional, vorbis or lame port "8000" bitrate "128" # do not define if quality is defined format "44100:24:1" } audio_output { type "pulse" name "My Pulse Output" } audio_output_format "44100:24:2" filesystem_charset "UTF-8" POZOR : Zásadní je, aby group bylo nastaveno na audio, jinak nebudeme moci přistupovat na ALSA karty.
Nyní máme nastaveny tři výstupy :
  • ALSA - přímý výstup do zvukové karty
  • HTTP stream na portu 8000 - pro "vnější" přehrávání
  • Pulse - pro pozdější využití(buď další článek, nebo rozšíření tohoto - podle náročnosti)
Dále vytvoříme potřebné složky a soubory pro mpd a změníme jejich vlastnictí pro naše potřeby: # mkdir -p /var/lib/mpd/playlists /var/run/mpd /var/log/mpd # touch /var/lib/mpd/{mpd.db,mpdstate} && touch /var/run/mpd/mpd.pid && touch /var/log/mpd/mpd.log # chown -R mpd:users /var/lib/mpd /var/run/mpd /var/log/mpd Přidáme uživatele mpd do skupiny audio, aby mohl přistupovat ke kartě : # gpasswd -a mpd audio

Nastavení ALSA

Následující kroky jsou nutné, pouze pokud na počítači ještě nebyla nastavena ALSA :
Spustíme daemona alsasound a přidáme ho do boot rc levelu : # /etc/init.d/alsasound start # rc-update add alsasound boot Nyní potřebujem zrušit mute, spustíme tedy alsamixer - zvýšíme hlasitost a stisknem M(Mute) pro panely, které dole mají MM(změní se na 00) a které potřebujeme(Master,PCM,Center) : # alsamixer Nyní, pokud vše funguje správně uslyšíme po spuštění tohoto příkazu sympatickým hlasem "Front Right" : # aplay /usr/share/sounds/alsa/Front_Right.wav Nyní už jen zapnout daemona a přidat ho do RC levelu : # /etc/init.d/mpd start # rc-update add mpd default

Thu, 19. May 2011 - před 668 týdnyArteal

Příkaz host v Gentoo Linuxu

Příkaz host pro zjišťování reverzních jmén podle IP a obráceně IP podle doménových jmén se v Gentoo Linuxu nelézá v balíku net-dns/bind-tools :)

Sat, 16. April 2011 - před 673 týdnyArteal

Změna error_reporting

Jelikož v PHP5.3 přibyla proměnná E_USER_DEPRECATED do pole předdefinovaných hodnot pro error_reporting, tak se tím pádem se zvýšila bitová hodnota E_ALL.

A proč to píšu?

protože v PHP5.2 při nastavení php.ini E_ALL & ~E_NOTICE byla bitová hodnota viditelná ve funkci phpinfo() 6135, kdežto stejná hodnota je v PHP5.3 zobrazena jako 30711

Sun, 7. November 2010 - před 696 týdnyArteal

Awstats a Debian Etch

Nastavení awstats jsem se letmo věnoval už dříve ve článku Nastavení AWstats, dneska bych se spíš chtěl zaměřit na to, jak awstats na serveru s Etchem rozjet. Ve článku předpokládám, že máme nastavený Apache(s virtualhosty s rootem ve složce /var/www/domain.tld/) a zvládnem nastavit Awstats(jejich nastavení tu nebudu rozebírat, protože je skvěle popsané ve výchozím configu)

V návodu používám "proměnnou" domain.tld, což je fiktivní doména, vy si za ni dosadíte název své domény, pro kterou instalujete Awstats

Začneme ůplně klasicky a logicky a to instalací požadovaného balíku :

apt-get install awstats

Nastavení Awstats :

Dále kopírujeme výchozí config a vytváříme vlastní verzi

cp /etc/awstats/awstats.conf /etc/awstats/awstats.domain.tld.conf

Též zkopírujem výchozí soubory awstats do složky výchozího virtual hostu :

cp /usr/lib/cgi-bin/awstats.pl /var/www/localhost/cgi-bin/awstats.pl cp /usr/share/icon /var/www/localhost/htdocs/awstats/icon

Ikdyž jsem předesílal, že se tu nastavení AWstats samu o sobě věnovat nebudu, přecejen bych tu uvedl pár změněných direktiv v tomto souboru a to sice :

DirData="/var/www/domain.tld/datadir" DirCgi="/var/www/localhost/cgi-bin" DirIcons="/awstats-icon"

Proč zrovna takto se dozvíte v další části :

Nastavení virtualhostu Apache

Nyní si otevřeme config apache, většinou v /etc/apache2/sites-available/domain.tld.conf a vložíme tyto řádky :

Alias /awstats-icon "/var/www/localhost/htdocs/awstats/icon/" ScriptAlias /awstats "/var/www/localhost/cgi-bin/awstats.pl" ScriptAlias /awstats.pl "/var/www/localhost/cgi-bin/awstats.pl"

A restartujeme Apache. Nyní máme statistiky dostupné přes adresu domain.tld/awstats.
Složku pro umístění souborů awstats(ikonek, popř. CSS souborů) jsem zvolil /var/www/locahost/htdocs, protože jsou soubory pro celý stroj stejné a je k nim přistupováno přes http.
Direktiva DirData je směrována do složky virtual hostu, protože protože pokud poskytujem FTP přístup k celému virtual hostu, tak není problém pokud do těchto souborů někdo nahlídne, kdežto DirCgi ukazuje do hlavního virtual hostu, kam má přístup pouze administrátor, protože přístup ke spouštění CGI skriptů by nemusel být bezpečný.
Na závěr ještě musíme umístit záznam do CRONu, aby se nám statistiky automaticky generovaly, to uděláme přidáním záznamu do souboru /etc/cron.d/awstats


0,10,20,30,40,50 * * * * www-data /var/www/localhost/cgi-bin/awstats.pl -config=domain.tld -update Nakonec bych ještě poznamenal, že je velmi pravděpodobné, že tento návod bude kromě Debian Etch kompatibilní i s dalšími Debian-like systémy. Přecijen je psaný na Ubuntu 8.04 :)

Thu, 12. February 2009 - před 785 týdnyArteal

OpenAscent UP

Takže se mi podařilo [konečne] rozchodit na ira vlastní ascent server :) Prozatím jen privátně, koneckonců na stálo jen pro vasltní testování :D

Thu, 22. May 2008 - před 823 týdnyArteal

Ira default page

Tak že po dlouhé době sekání se na WoW(lvl 63 mimochodem :D) jsem se rozhodl něco udělat zase na webu, začal jsem výchozí stránkou Apache pro můj doufám-prozatím domácí server Ira a to výchozí stránku : http://ira.blowfly.eu

Sat, 10. May 2008 - před 825 týdnyArteal