{"id":388,"date":"2008-06-16T12:33:48","date_gmt":"2008-06-16T11:33:48","guid":{"rendered":"http:\/\/ollmetzer\/?p=388"},"modified":"2008-06-16T12:33:48","modified_gmt":"2008-06-16T11:33:48","slug":"","status":"publish","type":"post","link":"https:\/\/www.ollmetzer.com\/?p=388","title":{"rendered":"zzap -> twitter"},"content":{"rendered":"<p>Seit eben gerade funktioniert mein zzap-to-twitter Interface endlich (wieder). Die dummen Kommentare in meinem Badge kommen alle vom Testen.<\/p>\n<p><strong>Was ist daran jetzt neu?<\/strong><br \/>\nBis vor 2 Wochen hatte ich ja bereits eine funktionierende Verbindung. Die jetzige L\u00f6sung unterscheidet sich aber in einem wichtigen Punkt: Nebenl\u00e4ufige Programmierung. Das bedeutet, da\u00df das normale Skript, welches der Nutzer per Webbrowser aufruft, alle Arbeiten, die m\u00f6glicherweise mehrere Minuten in Anspruch nehmen k\u00f6nnen, nicht selber ausf\u00fchrt, sondern an ein anderes Skript weiterreicht und sich selber beendet, w\u00e4hrend im Hintergrund die zeitintensiven Tasks weiterlaufen. Das ist eine Voraussetzung, um ein Benachrichtigungssystem f\u00fcr externe Systeme betreiben zu k\u00f6nnen.<\/p>\n<p><strong>Wo war das Problem?<\/strong><br \/>\nDie Aufgabe war klar, aber es gibt immer 100 verschiedene Wege zum Ziel. Die ersten Ideen gingen in Richtung einer Task-Queue, also einem st\u00e4ndig im Hintergrund laufenden Skript, da\u00df nachschaut, ob eine neue Aufgabe anliegt. Davon bin ich schnell wieder abger\u00fcckt, weil diese L\u00f6sung Overkill w\u00e4re und au\u00dferdem Probleme bei vielen Hosting-Providern verursachen w\u00fcrde, die st\u00e4ndig laufende Hintergrundprozesse ausschlie\u00dfen.<\/p>\n<p>Es musste also etwas einfacheres her: Der eigentliche Worker-Prozess muss direkt vom Webscript gestartet werden.<\/p>\n<p>\u00dcblicherweise macht man so etwas mit dem exec() &#8211; Befehl in PHP. Das funktionierte auch wunderbar sowohl auf meinen Entwicklungssystemen (jeweils einmal Windows, Apple OS X und Sun OS), aber ausgerechnet auf meinem Live-System war das Skript nicht zum Laufen zu bekommen. Den Worker direkt auf der Kommandozeile zu starten war kein Problem, nur \u00fcber den exec-Befehl in einem Web-Skript startete er nicht &#8211; unabh\u00e4ngig von allen Dateiberechtigen und Pfadeinstellungen. Ich vermutete schon, da\u00df der Provider diesen Befehl aus Sicherheitsgr\u00fcnden einfach gesperrt hat, aber ein einfaches echo exec(&#8218;whoami&#8216;) zeigte v\u00f6llig korrekt den Owner des Webservers an. Um es kurz zu machen: Der ganze Kram hat mich gut eineinhalb Wochen gekostet und gestern hatte ich die Nase voll.<\/p>\n<p>Die L\u00f6sung, die ich jetzt verwende ist richtig &#8222;basic&#8220;: Das Worker-Skript wird per HTTP \u00fcber CURL aufgerufen. Ganz ohne Hakeleien ging auch das nicht ab, aber nun l\u00e4uft es erst einmal. Ob diese L\u00f6sung auch einen Load von 1000 remote-calls verkraftet, weden wir dann sehen, wenn das Protokoll zum Nachrichtentausch funktioniert. F\u00fcr heute bin ich jedenfalls erstmal zufrieden. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Seit eben gerade funktioniert mein zzap-to-twitter Interface endlich (wieder). Die dummen Kommentare in meinem Badge kommen alle vom Testen. Was ist daran jetzt neu? Bis vor 2 Wochen hatte ich ja bereits eine funktionierende Verbindung. Die jetzige L\u00f6sung unterscheidet sich aber in einem wichtigen Punkt: Nebenl\u00e4ufige Programmierung. Das bedeutet, da\u00df das normale Skript, welches der [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9],"tags":[],"class_list":["post-388","post","type-post","status-publish","format-standard","hentry","category-development"],"_links":{"self":[{"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/posts\/388","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=388"}],"version-history":[{"count":0,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=\/wp\/v2\/posts\/388\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=388"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=388"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ollmetzer.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=388"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}