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ě.

NFSv4 client Arch Linux

Instalace NFSv4 klienta na Arch Linuxu

Instalace potřebného sw :

# pacman -S nfs-utils

ID mapping

Edituju soubor /etc/idmapd.conf, aby direktiva Domain byla stejná jako na serveru

modul nfs

Načtu si modul nfs:

# modprobe nfs

Služby

zapnu tyto dvě služby :

# /etc/rc.d/rpcbind start # /etc/rc.d/nfs-common start

/etc/hosts záznamy pro připojení

Napíšu si něco jako :

baketa:/pacman /var/cache/pacman nfs4 async,user 0 1

Přidat rpcbind a netfs do DAEMONS

Upravit soubor /etc/conf.d/nfs-common.conf

# Do you want to start the statd daemon? It is not needed for NFSv4. NEED_STATD="no" # Do you want to start the idmapd daemon? It is only needed for NFSv4. NEED_IDMAPD="yes"
mount -a

Pacman 4 a yaourt 1

Do mé oblíbené a “domovské” distribuce Arch Linux dorazila zbrusu nová verze balíčkovacího systému pacman a to ve verzi 4. Tato verze přináší několik novinek(nade vše podepisování gpg klíči), proto se ji bude věnovat celá část článku. Další část se bude věnovat nové verzi aplikace yaourt, která slouží pro využívání jedné z, dle mého názoru, nejlepších počinů komunity okolo Arch Linuxu a to AUR.

Pacman 4

Pokud budu přepodkládat, že již máte nainstalovaný yaourt a jeho závislost package-query, tak je nejdříve třeba je odinstalovat:

$ sudo pacman -Rds yaourt package-query

Dále nainstalujeme novou verzi pacman-a :

$ sudo pacman -Syu pacman

Pacman 4 přichází s trochu pozměněným konfiguračním souborem, je tedy třeba zrevidovat soubor /etc/pacman.conf.

Příklad mého konfiguračního souboru je zde : pacman.conf.

Používám rozšířené možnosti, které ukazují velikost balíčku, ukazují velikost všech stažených balíků, nepoužívám testing repozitáře a používám multilib repositář(který nepoužijete pokud používáte i686, neboli 32bit verzi systému).

Pacman-key

Aneb avizované podepisování gpg-klíči je nová fíčura pacman-a, která jednoduše řečeno zajišťuj, že je daný balíček opravdu od vývojáře, který ho “zabalil”. Zajistí se to tak, že si importujeme (pomocí pacman-key) GPG klíče vývojářů a pak kontrolujeme jejich fingerprinty. Tuto novou vychytávku ovšem nemusíme vůbec používat, máme tedy dvě možnosti :

Zakázat pacman-key

Pokud jste neupravovali soubor (před upgradem – při používání verze 3.x) /etc/pacman.conf, tak se vám automaticky nainstaloval nový konfigurační soubor, který v základním nastavení má pacman-key vypnuté.

Pokud použijete můj příklad, tak v konfigurační souboru zakomentujeme SigLevel = Optional TrustAll a odkomentujeme #SigLevel = Never.

Nastavit pacman-key

Zinicializujeme si databázi klíčů:

# pacman-key --init

Dále musíme importovat do naší klíčenky klíče vývojářů, na to nám poslouží jednoduchý skript z Arch wiki, který spoustíme jako root:

for key in FFF979E7 CDFD6BB0 4C7EA887 6AC6A4C2 824B18E8; do pacman-key --recv-keys $key pacman-key --lsign-key $key printf 'trust\n3\nquit\n' | gpg --homedir /etc/pacman.d/gnupg/ \ --no-permission-warning --command-fd 0 --edit-key $key done

Nyní můžeme upgradovat systém s oveřením podpisů:

# pacman -Syu

Instalace yaourt 1:

Yaourt máme nyní odistalovaný, takže jeho novou verzi nainstalujeme z nových balíčků, na které vede odkaz z AURu :

$ mkdir -p temp/yaourt $ cd temp/yaourt $ wget https://aur.archlinux.org/packages/pa/package-query/package-query.tar.gz $ tar zxvf package-query.tar.gz $ cd package-query/ $ makepkg -si $ cd .. $ wget https://aur.archlinux.org/packages/ya/yaourt/yaourt.tar.gz $ tar zxvf yaourt.tar.gz $ cd yaourt $ makepkg -si $ cd ..

Hlavním zdrojem byl wiki článek : wiki.archlinux.org/index.php/Pacman-key a AUR

Skinování openboxu

Dnes bych se chtěl věnovat tomu jak oskinovat, česky obléci, nebo nastavit vzhled mému oblíbenému správci oken(WM) jménem Openbox.
Openbox se v základu nestará o vzhled aplikací(což de facto ani nemůže), ani pozadí plochy, ale pouze o dekoraci oken.Postupně si tedy proberem metody jak tyto tři prvky ovlivnit :

Pozadí plochy

Začneme tím nejjednodušším, což paradoxně OpenBox sám o sobě neumí. Pro nastavení pozadí plochy tedy použijeme prográmek feh, který lze v Arch Linuxu jednoduše instalovat z oficiálního repositáře, tedy příkazem :

# pacman -S feh

Dále musíme feh umístit do soubor ~/.config/openbox/autostart, aby se nám pozadí načetlo po přihlášení do systému :

source ~/.fehbg

Dále si v domovském adresáři vytvoříme soubor .fehbg, do kterého uložíme příkaz potřebný k nastavení pozadí. Tento způsob jsem vybral, protože pokud budeme chtít v budoucnosti nastavit pozadí přes samotný feh, tak on si zapíše nastavení zrovna do tohoto souboru a naše prostředí bude tedy schopno tyto změny reflektovat. Soubor ~/.fehb bude tedy vypadat přibližně takto :

feh --bg-scale '/home/user/images/wallpapers/great_wp.jpg'

Dekorace oken

Jelikož je OpenBox primárně správce oken(WM), takže nastavení dekorace oken pro něj není nic cizího. Za základní postup pro změnu dekorací by se dala považovat úprava souboru ~/.config/openbox/rc.xml, konkrétně sekce , ale mi budeme líní a budeme chtít vědět z čeho můžeme vybírat a také si tento výběr rozšíříme, v Arch Linuxu toho docílíme následující instalací :

# pacman -S obconf openbox-themes

Nyní si spustíme program obconf, který také najdem v menu Openboxu jako položku System->Openbox Configuration Manager.
Hned první záložka je Themes, kde si můžeme vybrat vzhled dekorace oken a menu. Dále nás může zajíma záložka Appearance, kde se dá nastavit rozložení položek na titlebaru oken a fonty pro různé popisy(title bar,menu).
Dobrým zdrojem vzhledů pro Openbox je stránka box-look.org a její (odkazovaná) kategorie Openbox

Vzhled aplikací

Jelikož je OpenBox pouze správce oken, tak neposkytuje žádný způsob jak spravovat vzhled aplikací, ten si musíme upravit samy a to je závislé na grafické knihovně, na které je aplikace napsaná.
Za upředňostňovanou knihovnu ve “světě openboxu” by se s klidem dala označit knihovna GTK, je na ní napsaný obconf, který jsme použili pro konfiguraci dekorace oken OpenBoxu.
Pro knihovnu GTK je také napsáno mnoho “minimalistického” softwaru, po kterém dost možná toužíme, už proto, že jsme si vybrali minimalistické prostředí jako je OpenBox a ne celý DE. Nemůžeme říct, že by aplikace psané pro “konkurenční” knihovnu Qt byli vždy “přerostlé”, nebo ani “zbytečně velké”, ale už tendence(v positivním slova smyslu) psát aplikace integrované do KDE pro nás nejsou přílišnou výhodou. Ač tedy knihovnu Qt nijak nezavrhuji, budu se věnovat nastavení skinu pro knihovnu GTK2.

Z několika aplikací pro změnu vzhledu GTK aplikací jsem si nakonec vybral lxappearence. Lxappearence jsem si vybral hlavně pro to, že nabízí kompletní změnu vzhledu : tudíž samotný skin, ikonky i kurzor. Lxappearence instalujeme v Archu z repositáře community :

# pacman -S lxappearence

Mnoho zajímavých vzhledů můžeme získat z webu www.gnome-look.org, nás budou zajímat kategorie GTK 2.x a Icons

Instalace keychain v Arch Linuxu

Na co je keychain?

Pokud často “přepínáte” mezi více stroji, přesněji se přihlašujete z jednoho na druhý pomocí SSH, určitě jste slyšeli o možnosti použít pro zjednodušení tohoto procesu RSA(či jiný) klíč.
Zjednodušeně řečeno, na stroji, u kterého sedíte máte privátní klíč a na stroji, na který se připojujete máte kopii vašeho veřejného klíče.

Zde přichází na řadu otázka bezpečnosti. Pokud máte klíč neěifrovaný, je vše bezpečné do doby, než se k vašemu (privátnímu) klíči někdo dostane.
Pokud máte klíč šifrovaný, je vše v pořádku, jenže k použití klíče musíte vždy zadávat heslo. Což není žádný problém do té doby, kdy chcete, aby stroj mohl vykonávat automatizované připojení na jiný stroj a použít k němu tento šifrovaný privátní RSA klíč.

Řešením tohoto problému je právě program keychain. Keychain vás vyzve k zadání hesla ke klíči, odemče jej a uloží jej do paměti.

Instalace keychainu

Samotná instalace keychain je v Arch Linuxu velmi jednoduchá, balíček je v oficiálním repositáři extra. Stačí tedy klasický příkaz pro instalaci :

# pacman -S keychain

Dále musíme nastavit “spuštění” keychainu. Toho docílíme upravením souborů načítaných při spuštení shellu – přidáme tedy do souboru ~/.bashrc toto :

eval `keychain --eval --agents ssh id_rsa`

Nyní stačí otevřít nový shell a jsme tázání na heslo pro náš certifikát.
Odteď je vždy potřeba, v prvním otevřeném terminálu, předat keychainu heslo.

Ksshaskpass

Pokud ovšem používáme grafické prostředí KDE, je tu možnost instalace programu ksshaskpass, který nejen, že nám poskytne grafický dialog, ale umí si také uložit heslo do KDE wallet, nemusíme ho tedy vždy zadávat, jen si odemčeme wallet a bude použito heslo z ní. Ksshaskpass je dostupný v Arch Linuxu v repositáři community, takže jej nainstalujeme jednoduše takto :

# pacman -S ksshaskpass

Po restartu počítače a otevření nového terminálu jsme vyzváni k vložení hesla pro daný certifikát a případné uložení hesla do KDEwallet.

Nyní je náš certifikát bezpečně šifrován heslem, které zadáváme pouze jednou – po spuštění počítače. Nebo, v případě že používáme KDE ani jednou, jelikož wallet otevíráme při každém spuštění počítače, např. pro IM v Kopete

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

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

Arch Linux a ATI

Rozhodl jsem se napsat článek o ovladačích v Arch Linuxu, jelikože jsou v dnešní době dostupné troje ovladače :
xf86-video-ati(radeon),xf86-video-radeonhd(radeonhd) a oficiální propietární catalyst a mimo to také spousta možného nastavení.

Mým cílem je “vymáčknout z toho co nejvíc” a to hlavně co se týká 3D akcelerace. Jako cíl testování jsem si vybral Efekty plochy v KDE4.4, glxgears a nejspíš přídám i nějakou tu hru pod wine.

Testovací sestava

HW : CPU Intel [email protected],MB GIGABYTE G33-DS3R,2GB RAM, GPU GIGABYTE ATI HD4550
SW : Linux 2.6.32-ARCH #1 SMP PREEMPT Tue Feb 9 14:46:08 UTC 2010 i686 GenuineIntel, KDE4.4(KDEmod)

xf86-video-ati

Nejdříve se zaměříme na free ovladače radeon, protože jsou Linuxovou komunitou považovány za nejlepší volbu(open-source, vyvíjeny přímo X.org-em). Testovaná verze je 6.12.4-3

Výsledky tohoto ovladače se dají označit za velmi uspokojující. X server je funkční bez Xorg.conf, efekty plochy jsou od začátku funkční a plynulé, glxgears ukazují v klidu 1400-1500FPS, v zátěži(ryhclé posunování oknem) kolísá až pod hodnotu 600FPS. Direct Rendering funguje.

xf86-video-radeonhd

Alternativní ovladače, vyvíjené Novellem si na mé, testované kartě vedou podstatně hůř. Testovaná verze je 1.3.0-1.
Bez Xorg.conf se nerozjedou vůbec. je potřeba minimálně nastavit že se jedná o ovladač radeonhd. glxgears ukazují 1500FPS v klidu a v zátěži kolísá pouze pod 1200FPS. Obraz ovšem občas náhodně celkem otravně problikává.

catalyst

Tyto ovladače se mi během textu vůbec nepodařilo nainstalovat. Zdá se tedy, že vývojáři(potažmo “balíčkáři”) pro Arch Linux tuto možnost zavhrují. Já se tomuto ovladači nyní tedy nebudu věnovat, ale za to ho v dalším článku rozeberu do podrobností, i s instalací, jelikož právě v tomto ovladači je potenciál kvalitní podpory 3D akcelerace a tudíž PC her na Linuxu, které byli vedlejším předmětem zkoumání v tomto článku.

Užitečné linky:

Neoficiální návod na instalaci ATI karty v Arch Linuxuna tomto webu jsou neoficiálni návody na instalaci oficiálních catalyst ovaldačů (i pro různé další distribuce)

Seznam ATI procesorů – pokud např. nevíte že testovaná grafika HD4550 má jádro RV710 – s tímto “dělením” karet podle procesoru se často setkáváme např. na oficiálním webu X.org

Arch Linux Wiki : Ati – článek o ATI ovladačích na Arch Linux Wiki

// Tento článek byl napsán i oživen díky Googlu a jeho Bloggeru