heim - Internet-Setup
Partnerprogramm. Einen PHP-Daemon neu starten, ohne die Verbindung zu ihm zu verlieren. Disaster success php
Eine Reihe von Schlüssel/Wert-Paaren, die die Anfrage konfigurieren AJAX. Alle Parameter sind optional. Es ist akzeptabel, aber nicht empfohlen, mit der Methode $.ajaxSetup() einen Standardwert für jeden Parameter festzulegen.
Die Methode $.ajax() unterstützt die folgenden Parameter:

    akzeptiert (Standard: abhängig von dataType ).

    Typ: PlainObject.
    Eine Reihe von Schlüssel/Wert-Paaren, an die gesendet wird Akzeptieren Anforderungsheader. Dieser Header teilt dem Server mit, welche Art von Antwort die Anfrage als Antwort akzeptiert. Beachten Sie, dass der Wert des in dataType angegebenen Parameters (der Datentyp, den wir vom Server erwarten) dem im Parameter angegebenen Wert zugeordnet wird. Um die Antwort vom Server korrekt zu verarbeiten, müssen Sie außerdem im Parameter „converters“ eine Funktion angeben, die den konvertierten Antwortwert zurückgibt. Zum Beispiel: $.ajax(( akzeptiert : ( mycustomtype: "application/x-some-custom-type " ) , // geben Sie an, wie die Antwortkonverter verarbeitet werden sollen : ("text mycustomtype ": function ( Ergebnis) ( // den konvertierten Antwortwert zurückgeben return newresult; ) ), // Erwarteter Datentyp („mycustomtype“) dataType : „mycustomtype“ ) );

    asynchron (Standard: true ).

    Typ: Boolesch.
    Standardmäßig werden alle Anfragen asynchron gesendet. Wenn Sie synchrone Anfragen organisieren müssen, setzen Sie diesen Parameter auf false . Beachten Sie, dass domänenübergreifende Abfragen und ein Element, dessen dataType-Parameter lautet „jsonp“ unterstützen keine Abfragen im synchronen Modus. Bitte beachten Sie, dass Sie bei synchronen Anfragen den Browser vorübergehend blockieren können, indem Sie alle Aktionen deaktivieren, während die Anfrage aktiv ist.

    vorSenden. Typ: Funktion(jqXHR jqXHR,PlainObject Einstellungen).
    Eine Rückruffunktion, die aufgerufen wird, bevor die AJAX-Anfrage gestellt wird. Mit der Funktion können Sie das jqXHR-Objekt (in jQuery 1.4.x das XMLHTTPRequest-Objekt) ändern, bevor es gesendet wird. Das jqXHR-Objekt ist ein Add-on, das das XMLHttpRequest-Objekt erweitert. Das Objekt enthält viele Eigenschaften und Methoden, mit denen Sie umfassendere Informationen über die Serverantwort erhalten können, und das Objekt enthält auch Promise-Methoden. Wenn die beforeSend-Funktion false zurückgibt, wird die AJAX-Anfrage abgebrochen. Seit Version jQuery 1.5 Die Funktion beforeSend wird unabhängig vom Anforderungstyp aufgerufen.

    Cache (Standard: true, für dataType "Skript" Und „jsonp“ FALSCH ).

    Typ: Boolesch.
    Wenn der Wert auf „false“ gesetzt ist, führt dies dazu, dass angeforderte Seiten nicht vom Browser zwischengespeichert werden. Beachten Sie, dass false nur mit richtig funktioniert KOPF Und ERHALTEN Anfragen.

    vollständig.

    Typ: Funktion(jqXHR jqXHR, Zeichenfolge textStatus).
    Eine Funktion, die aufgerufen wird, wenn die Anfrage endet (die Funktion wird nach AJAX-Ereignissen ausgeführt). "Erfolg" oder "Fehler"). Der Funktion werden zwei Parameter übergeben: jqXHR(im jQuery 1.4.x-Objekt XMLHTTPRequest) und eine Zeile, die dem Anforderungsstatus entspricht ( "Erfolg", "Nicht modifiziert", "kein Inhalt", "Fehler", "Auszeit", "Abtreibung", oder "Parser Fehler"). Seit jQuery 1.5 kann der vollständige Parameter ein Array von Funktionen akzeptieren, die einzeln aufgerufen werden.

    Inhalt.

    Typ: PlainObject.
    Ein Objekt, das aus String/Regex-Paaren besteht, die bestimmen, wie jQuery die Antwort abhängig vom Inhaltstyp verarbeitet (analysiert). Hinzugefügt in jQuery 1.5.

    contentType (Standard: „application/x-www-form-urlencoded; charset=UTF-8“).

    Typ: Boolean oder String.
    Definiert den Inhaltstyp, der in der Anfrage beim Senden von Daten an den Server angegeben wird. Seit jQuery 1.6 ist es möglich, den Wert false anzugeben, in diesem Fall übergibt jQuery das Feld nicht im Header Inhaltstypüberhaupt.

    Kontext.

    Typ: PlainObject.
    Beim Ausführen von AJAX-Callback-Funktionen ist ihr Ausführungskontext das Fensterobjekt. Mit dem Kontextparameter können Sie den Funktionsausführungskontext so konfigurieren, dass $(this ) auf ein bestimmtes DOM-Element oder -Objekt verweist. Zum Beispiel: $.ajax(( url : "test.html ", context : $(".myClass "), // neuer Funktionsausführungskontext success : function ()( // Wenn die Anfrage erfolgreich ist, rufen Sie die Funktion $ auf (this ).html ("Alles ist in Ordnung"); // Textinhalt zum Element mit der class.myClass hinzufügen ) ) );

    Konverter

    Standardwerte:
    ( "* text ": window.String, // beliebiger Texttyp "text html": true, // Text in HTML "text json": jQuery.parseJSON, // Text in JSON "text xml": jQuery.parseXML // Text in XML) Typ: PlainObject.
    Ein Objekt, das den zu konvertierenden Datentyp und die Art und Weise seiner Konvertierung enthält. Der Wert jedes Konverters ist eine Funktion, die den konvertierten Antwortwert zurückgibt. Hinzugefügt in jQuery 1.5.

    crossDomain (Standard: false für Anfragen innerhalb derselben Domäne, true für domänenübergreifende Anfragen).

    Typ: Boolesch.
    Wenn Sie in derselben Domäne eine domänenübergreifende Anfrage stellen möchten (z. B. eine JSONP-Anfrage), setzen Sie diesen Parameter auf true . Dadurch können Sie beispielsweise eine Anfrage von Ihrem Server an eine andere Domain umleiten. Hinzugefügt in jQuery 1.5.

    Typ: PlainObject oder String oder Array.
    Daten, die an den Server gesendet werden. Wenn es sich nicht um eine Zeichenfolge handelt, werden sie in eine Abfragezeichenfolge umgewandelt. Für ERHALTEN Anfragen wird die Zeichenfolge zur URL hinzugefügt. Um eine automatische Verarbeitung zu verhindern, können Sie den Parameter „processData“ mit dem Wert „false“ verwenden. Werden Daten als Teil eines Objekts übertragen, müssen diese aus Schlüssel/Wert-Paaren bestehen. Wenn der Wert ein Array ist, serialisiert jQuery mehrere Werte mit demselben Schlüssel (abhängig vom Wert des traditionellen Parameters, wodurch der traditionelle Serialisierungstyp basierend auf der $.param-Methode aktiviert wird).

    Datenfilter.

    Typ: Funktion(String Daten, Zeichenfolge Typ) => Alles.
    Die Funktion wird nach erfolgreichem Abschluss einer AJAX-Anfrage aufgerufen und ermöglicht die Verarbeitung der aus der Serverantwort erhaltenen „Rohdaten“. Die Rückgabe der Daten muss unverzüglich nach der Verarbeitung erfolgen. Die Funktion benötigt zwei Argumente: Daten- vom Server empfangene Daten in Form einer Zeichenfolge und Typ- der Typ dieser Daten (der Wert des dataType-Parameters).

    dataType (Standard: xml, json, Skript, oder html).

    Typ: Zeichenfolge.
    Definiert die Art der Daten, die Sie vom Server erwarten. Wenn der Datentyp nicht angegeben ist, versucht jQuery, ihn anhand des MIME-Typs aus der Antwort zu ermitteln ( XML Typ MIME führt ab jQuery 1.4 zu XML json wird ein Objekt geben JavaScript, Skript führt das Skript aus und alles andere wird als String zurückgegeben.

    Grundtypen (das Ergebnis wird als erstes Argument an die Erfolgsrückruffunktion übergeben):

    • „xml“ – gibt zurück XML Dokument, das mit jQuery gerendert werden kann.
    • „html“ – gibt zurück HTML Als einfacher Text werden Tags verarbeitet und ausgeführt, sobald sie in das Dokumentobjektmodell eingefügt werden ( DOM).
    • „script“ – wertet die Antwort aus als JavaScript und gibt es als Klartext zurück. Deaktiviert das Caching durch Hinzufügen des Parameters _= zur Abfragezeichenfolge, auch wenn der Cache-Parameter true ist. Dadurch wird die Methode geändert POST V ERHALTEN für domänenübergreifende Anfragen.
    • „json“ – wertet die Antwort aus als JSON und gibt ein Objekt zurück JavaScript. Domänenübergreifend „json“ Anfragen werden in umgewandelt „jsonp“, wenn jsonp nicht in den Anforderungsparametern angegeben ist: false . Daten JSON werden in einer strengen Reihenfolge analysiert und müssen dem allgemein akzeptierten Format entsprechen, alle Fehler sind falsch JSON wird abgelehnt und ein Fehler ausgegeben. Ab jQuery 1.9 wird eine leere Antwort nicht mehr akzeptiert; der Server muss NULL oder () als Antwort zurückgeben.
    • „jsonp“ – lädt Daten im Format JSON, im Download-Format JSONP. Fügt am Ende einen zusätzlichen Parameter „?callback=?“ hinzu URL Adressen zur Angabe des Namens der Handlerfunktion. Deaktiviert das Caching durch Hinzufügen des Parameters _= URL Adresse, auch wenn der Cache-Parameter true ist.
    • „text“ ist eine normale Textzeichenfolge.
    • Mehrere Werte – Werte werden durch ein Leerzeichen getrennt. Seit Version 1.5 kann jQuery den Datentyp, der im Content-Type des Headers empfangen wird, in den Datentyp konvertieren, den Sie benötigen. Wenn Sie beispielsweise möchten, dass eine Textantwort als XML interpretiert wird, verwenden Sie „Text-XML“ für diesen Datentyp. Sie können auch eine JSONP-Anfrage stellen, diese als Text empfangen und als interpretieren XML: „jsonp text XML“ . Die folgende Zeile bewirkt dasselbe: „jsonp XML“, jQuery wird versuchen, daraus zu konvertieren JSONP V XML, nach einem erfolglosen Versuch wird versucht, zu konvertieren JSONP in den Text und dann aus dem Text hinein XML.
  • Typ: Funktion(jqXHR jqXHR, Zeichenfolge textStatus, Zeichenfolge errorThrown).
    Eine Rückruffunktion, die aufgerufen wird, wenn die AJAX-Anfrage nicht abgeschlossen wurde. Die Funktion erhält drei Argumente:

    • jqXHR- jqXHR-Objekt (in jQuery 1.4.x XMLHttpRequest-Objekt).
    • textStatus– eine Zeichenfolge, die die Art des aufgetretenen Fehlers beschreibt. Mögliche Werte (außer null ) sind nicht möglich "Auszeit", "Fehler", "Abtreibung" Und "Parser Fehler".
    • errorThrown- zusätzliches Ausnahmeobjekt, falls aufgetreten. Wenn ein Fehler auftritt HTTP Das Argument erhält den Textteil des Zustands, z.B. "Nicht gefunden", oder "Interner Serverfehler".
    Seit Version jQuery 1.5 Es ist erlaubt, ein Array von Funktionen als Parameterwert zu übergeben, und jede Funktion wird nacheinander aufgerufen. Beachten Sie, dass dieser Handler nicht für domänenübergreifende Skripte und JSONP-Anfragen aufgerufen wird.
  • global (Standard: true ).

    Typ: Boolesch.
    Ein boolescher Parameter, der bestimmt, ob globale AJAX-Ereignishandler für diese Anfrage aufgerufen werden dürfen. Der Standardwert ist true . Wenn Sie verhindern müssen, dass globale Ereignishandler wie .ajaxStart() oder .ajaxStop() aufgerufen werden, verwenden Sie false .

    Header (Standard: ( ) ).

    Typ: PlainObject.
    Ein Objekt, das Schlüssel/Wert-Paare zusätzlicher Anforderungsheader enthält, die zusammen mit der Anforderung mithilfe des XMLHttpRequest-Objekts gesendet werden. Bitte beachten Sie, dass der Titel X-Requested-With: XMLHttpRequest wird immer hinzugefügt, aber der Wert von XMLHttpRequest kann standardmäßig mit diesem Parameter geändert werden. Header-Werte können auch durch den Parameter beforeSend überschrieben werden. Hinzugefügt in jQuery 1.5.

    ifModified (Standard: false ).

    Typ: Boolesch.
    Standardmäßig ist der Wert false , ignoriert die HTTP-Anfrage-Header-Felder und wenn er auf „true“ gesetzt ist, wird die AJAX-Anfrage in den Erfolgsstatus versetzt ( Erfolg), nur wenn sich die Antwort vom Server seit der letzten Anfrage geändert hat. Die Validierung erfolgt durch Überprüfung des Headerfelds „Last-Modified“. Seit Version jQuery 1.4 Zusätzlich zum Last-Modified-Header wird auch der „etag“ überprüft ( Entitäts-Tag) ist eine private Kennung, die von einem Webserver einer bestimmten Version einer unter einer URL gefundenen Ressource zugewiesen wird. Wenn sich der Ressourceninhalt für diese Adresse in einen neuen ändert, wird ein neues Etag zugewiesen.

    isLocal (Standard: abhängig vom aktuellen Standort).

    Typ: Boolesch.
    Verwenden Sie true, um die aktuelle Umgebung als „lokal“ zu definieren (z. B. file:///url), auch wenn jQuery sie standardmäßig nicht als solche erkennt. Die folgenden Protokolle werden derzeit als lokal erkannt: Datei, *-Verlängerung Und Widget. Wenn Sie den Parameter isLocal ändern müssen, wird empfohlen, dies einmal mit der Funktion $.ajaxSetup() zu tun. Hinzugefügt in jQuery 1.5.1.

    Typ: Boolean oder String.
    Überschreibt den Namen der Rückruffunktion in JSONP Anfrage. Dieser Wert wird anstelle von „callback“ verwendet ( „http://domain.ru/test.php?callback=?“) als Teil der Abfragezeichenfolge in der URL. Beispielsweise wird der Wert (jsonp: „onLoad“) als folgende Abfragezeichenfolge an den Server übergeben „http://domain/test.php?onLoad=?“.
    Seit jQuery 1.5 verhindert das Setzen des jsonp-Parameters auf „false“, dass die Zeichenfolge „?callback“ zur URL hinzugefügt wird, oder es wird versucht, „=?“ zum Auflösen der Antwort zu verwenden. In diesem Fall müssen Sie zusätzlich den Wert des jsonpCallback-Parameters angeben, zum Beispiel: ( jsonp : false , jsonpCallback : "callbackName " ) Wenn Sie dem Ziel Ihrer AJAX-Anfragen aus Sicherheitsgründen nicht vertrauen, wird dies empfohlen Setzen Sie den Wert des JSONP-Parameters auf false .

    jsonpCallback.

    Typ: String oder Funktion.
    Gibt den Namen der Rückruffunktion für an JSONP Anfrage. Dieser Wert wird anstelle eines zufälligen Namens verwendet, der automatisch von jQuery generiert und zugewiesen wird. Es wird empfohlen, dass jQuery den eindeutigen Namen selbst generiert. Dies erleichtert die Verwaltung von Anfragen und den Umgang mit möglichen Fehlern. In einigen Fällen verbessert das Festlegen eines eigenen Funktionsnamens das Browser-Caching ERHALTEN Anfragen.
    Seit jQuery 1.5 können Sie eine Funktion als Wert des jsonpCallback-Parameters angeben. In diesem Fall muss der Wert des Parameters jsonpCallback auf den Rückgabewert dieser Funktion gesetzt werden.

    Methode (Standard: "ERHALTEN").

    Typ: Zeichenfolge.
    Methode HTTP, für die Abfrage verwendet (z. B. "POST", "ERHALTEN", "SETZEN"). Hinzugefügt in jQuery 1.9.0.

    Mime Typ.

    Typ: Zeichenfolge.
    Ein MIME-Typ, der den im XHR-Objekt angegebenen Standard-MIME-Typ überschreibt. Hinzugefügt in jQuery 1.5.1.

    Passwort.

    Typ: Zeichenfolge.
    Das Passwort, das mit XMLHttpRequest in der Antwort auf die Zugriverwendet wird HTTP.

    ProcessData (Standard: true).

    Typ: Boolesch.
    Standardmäßig werden Daten, die als Objekt an den Datenparameter übergeben werden, verarbeitet und in eine für den Standarddatentyp geeignete Abfragezeichenfolge konvertiert „application/x-www-form-urlencoded“. Wenn Sie DOMDocument oder andere unverarbeitete Daten senden müssen, legen Sie diesen Parameter auf false fest.

    scriptCharset.

    Typ: Zeichenfolge.
    Setzt das charset-Attribut (Zeichenkodierung) auf das in der Anfrage verwendete HTML-Tag. Wird verwendet, wenn die Kodierung auf der Seite von der Kodierung des Remote-Skripts abweicht. Bitte beachten Sie, dass der Parameter „scriptCharset“ nur für domänenübergreifende Anfragen mit einem Typparameter mit dem Wert gilt "ERHALTEN"(Standard) und dataType-Parameter mit Wert „jsonp“, oder "Skript".

    statusCode (Standard: ( ) ).

    Typ: PlainObject.
    Numerisches Codeobjekt HTTP und Funktionen, die aufgerufen werden, wenn der Server-Antwortcode den entsprechenden Wert (einen bestimmten Code) hat HTTP). Beispielsweise wird die folgende Funktion aufgerufen, wenn ein Antwortcode vom Server empfangen wird 404 , oder "Nicht gefunden"(Standard-HTTP-Antwortcode, der angibt, dass der Client mit dem Server kommunizieren konnte, der Server jedoch die angeforderten Daten nicht finden konnte.): $.ajax(( statusCode : ( 404: function ()( // Funktion ausführen, wenn HTTP Antwortcode 404 Alert("Seite nicht gefunden"); ) , 403: function ()( // Funktion ausführen, wenn der HTTP-Antwortcode 403 Alert("Zugriff verweigert"); ) ) ) );

    Erfolg.

    Typ: Funktion (Alles Daten, Zeichenfolge textStatus,jqXHR jqXHR).
    Eine Rückruffunktion, die aufgerufen wird, wenn die AJAX-Anfrage erfolgreich ist. Der Funktion werden drei Argumente übergeben:

    • Daten- Vom Server zurückgegebene Daten. Die Daten werden gemäß den Parametern dataType oder dataFilter formatiert, sofern angegeben
    • textStatus– eine Zeichenfolge, die den Status der Anfrage beschreibt.
    • jqXHR- jqXHR-Objekt (bis Version jQuery 1.4.x XMLHttpRequest-Objekt).
    Seit Version jQuery 1.5 Es ist erlaubt, ein Array von Funktionen als Parameterwert zu übergeben, und jede Funktion wird nacheinander aufgerufen.
  • Auszeit.

    Nummer eingeben.
    Installiert in Millisekunden Zeitüberschreitung der Anforderung. Bedeutung 0 bedeutet, dass kein Timeout festgelegt wurde. Bitte beachten Sie, dass dieser Parameter den mit der Funktion $.ajaxSetup() festgelegten Timeout-Wert überschreibt. Die Wartezeit beginnt in dem Moment, in dem die Methode $.ajax() aufgerufen wird.

    traditionell.

    Typ: Boolesch.
    Wenn Sie herkömmliche Serialisierungsoptionen verwenden möchten (geeignet für die Verwendung in Zeichenfolgen). URL Anfrage oder Anfrage AJAX), dann setzen Sie den Wert dieses Parameters auf true .

    Typ (Standard: "ERHALTEN").

    Typ: Zeichenfolge.
    Ein Alias ​​für den Methodenparameter. Sie sollten type verwenden, wenn Sie Versionen verwenden jQuery vor 1.9.0.

    URL (Standard: aktuelle Seite).

    Typ: Zeichenfolge.
    Eine Zeile mit URL die Adresse, an die die Anfrage gesendet wird.

    Nutzername.

    Typ: Zeichenfolge.
    Der Benutzername, der mit XMLHttpRequest in der Antwort auf die Zugriverwendet werden soll HTTP.

    xhr (Standard: ActiveXObject, wenn verfügbar ( Internet Explorer), in anderen Fällen XMLHttpRequest .

    Typ: Function() .
    Rückruf zum Erstellen eines XMLHttpRequest-Objekts. Mit diesem Parameter können Sie das XMLHttpRequest-Objekt überschreiben, um Ihre eigene Implementierung bereitzustellen.

    xhrFields.

    Typ: PlainObject.
    Ein Objekt, das Feldname:Feldwertpaare enthält, die auf das XHR-Objekt festgelegt werden. Sie können beispielsweise definieren, ob domänenübergreifende Anfragen mit Anmeldeinformationen wie erstellt werden sollen Plätzchen, Autorisierungsheader oder TLS-Zertifikate: $.ajax(( url : "cross_domain_url ", // die Adresse, an die die Anfrage gesendet wird xhrFields : ( withCredentials: true // unterstützt in jQuery 1.5.1 + ) ) );

Grüße, lieber Freund!

„Was bedeutet Erfolg im Leben für dich???“

Ich bitte Sie, nachzudenken und einen Moment innezuhalten.

Okay, jetzt lass mich dir helfen. Im letzten Newsletter habe ich darüber geschrieben, was kein Erfolg ist. Lassen Sie uns diese Konzepte gleich verwerfen.

Erfolg ist spirituelle Harmonie.
Erfolg ist glücklich sein.
Erfolg bedeutet, sich selbst zu erkennen und sein Potenzial freizusetzen.
Erfolg ist Erfüllung im Leben.
Erfolg besteht darin, das zu tun, was man liebt, was einem Freude bereitet, und das rund um die Uhr.
Erfolg bedeutet, sich für andere einzusetzen und diese Welt zu einem besseren Ort und andere Menschen glücklicher zu machen.

Erfolg ist untrennbar mit dem Geisteszustand verbunden. Unsere Seele kam auf diese Welt, um Vergnügen zu finden und sich selbst zu verwirklichen, und wir (unser Geist, unser Körper, unser Bewusstsein) müssen sie dabei unterstützen. Wenn unsere Seele sich selbst erschafft und verwirklicht, fühlen wir uns glücklich. Wenn wir spüren und sehen, dass die Erschaffung unserer Seele und das, was wir tun, anderen Menschen großen Nutzen bringt, empfinden wir Glückseligkeit. Das nennt man Erfolg. Erfolg ist die Fülle des Lebens.

Die Verwirklichung der Talente der Seele ist nur dank anderer Menschen möglich. Die Seele erschafft nicht für sich selbst. Sie schafft für andere – um ihnen zu helfen, das Leben anderer erfüllt zu machen und ihnen ein Stück ihres Glücks zu vermitteln. Ein glücklicher Mensch gibt ein Stück seines Glücks an andere weiter, ein unglücklicher Mensch teilt sein Unglück an andere weiter. Vermeiden Sie unglückliche Menschen!

Wenn plötzlich alle Menschen auf einmal verschwinden, wird die Selbstverwirklichung unmöglich – welchen Sinn hat es, Bücher zu schreiben, weil niemand sie lesen wird, welchen Sinn es hat, neue Kleidungsmodelle zu kreieren, weil niemand sie tragen wird, was Ist es sinnvoll, neue Häuser zu bauen, in denen niemand mehr wohnen wird?

Offensichtlich macht das keinen Sinn.

Hier offenbart sich die Doppelnatur des Erfolgs: Die Seele erschafft und verwirklicht sich selbst und hilft auch anderen Menschen, glücklicher zu werden.
Die genaueste Definition von Erfolg, die ich geben könnte, würde so lauten: Erfolg ist die Verwirklichung Ihrer wahren Talente, die unsere Welt besser, perfekter und die Menschen glücklicher machen.

Ich möchte, dass Sie zutiefst verstehen, dass Menschen, die nur für sich selbst leben und Reichtum nur für sich selbst ansammeln, unglücklich sind. Sie sammeln diese Reichtümer, um die spirituelle Leere zu füllen, die durch ein sinnloses Leben entstanden ist. Aber diese Leere kann nur mit Liebe gefüllt werden, die anderen Menschen einen Mehrwert bietet. Die Seele ist glücklich, wenn sie sich ohne Übermaß dafür einsetzt, diese Welt zu einem besseren Ort zu machen. Und was nützt all der Reichtum, den ein Mensch angesammelt hat, wenn er stirbt, denn wir sind nicht dauerhaft. Die Seele kommt, um Werte zu schaffen, sich selbst zu verwirklichen und kehrt dann „nach Hause“ zurück. Wenn sie diesen Wert nicht schafft und etwas anderes tut, geht es ihr schlecht. Sie hat das Gefühl, auf diese Welt gekommen zu sein und nicht das zu tun, was sie will. Und der Grund dafür ist unser Verstand – er ist geblendet vom „Erfolg“ im allgemeinen Verständnis dieses Wortes. Er verfolgt das Illusionäre, und wenn er es erreicht, wenn er es überhaupt erreicht, erkennt er die Sinnlosigkeit dessen, was er erreicht hat.

Was ist Erfolg im allgemeinen Verständnis?
- Reichtum (Geld, materielle Dinge)
- Ruhm, Macht, Popularität
- Status

Aber schauen Sie, alles kommt vom Ego. Ein Mensch möchte seine Bedeutung spüren, versteht aber nicht, dass Reichtum, Ruhm und Status eine Illusion sind. Sie sind wie Meerwasser, das Ihren Durst nie stillt, egal wie viel Sie trinken. Deshalb verbringen Menschen ihr ganzes Leben damit, sie zu verfolgen. Sie denken, ich werde so viel Geld verdienen und glücklich sein, ich werde ein Einkommen von 100.000 Dollar im Jahr erreichen und dann werde ich glücklich sein, wenn ich auf die Bühne gehe und singe, werde ich glücklich sein, ich Ich werde heiraten, ich werde Kinder haben... Sie können das überprüfen, aber ich kann mit hundertprozentiger Sicherheit sagen, dass Sie nicht glücklich sein werden. Darüber hinaus wird Ihr Glücksniveau noch geringer. Sie entfernen sich von Ihrer Berufung und wenn Sie dies erkennen, wird die Seele noch unglücklicher. Je mehr Reichtum, Ruhm und Status Sie erhalten, desto mehr Kontrolle übernimmt der Geist über das Leben und desto weiter entfernt sich die Rolle der Seele. Aber wahres Glück kommt von der Seele!!!

Erfolg ist Harmonie zwischen Seele und Geist. Die Rolle des Geistes besteht darin helfen Seele zur Selbstverwirklichung. Wir setzen falsche Prioritäten. Wir stellen den kurzlebigen Körper und die materiellen Dinge an die erste Stelle und die unsterbliche Seele und den unerschöpflichen Reichtum an die letzte Stelle. In der Bibel heißt es: „Bewahre deinen Reichtum im Himmel auf, nicht auf der Erde.“ Unser Körper ist ein Vehikel für die Seele. Die Seele ist mit dem Höheren Geist verbunden und nur sie ist in der Lage zu verstehen, was für diese Welt benötigt wird. Das Universum bevorzugt Menschen, die ihren eigenen Weg gehen. Der eigene Weg verbraucht am wenigsten Energie, und in unserer Welt verläuft alles auf dem Weg des geringsten Widerstands. Ich sage immer, dass Erfolg ein normaler Ablauf ist. Ein Scheitern ist eine Abweichung von der Norm. Wenn Sie jetzt nicht so erfolgreich sind, wie Sie es sich wünschen, dann tun Sie nicht das, was Sie tun sollten. Seele und Geist sind im Zwiespalt. Und je größer diese Zwietracht ist, desto unglücklicher ist ein Mensch.

Aber denken Sie nicht, dass ich sage, dass ein Mensch keine materiellen Dinge braucht. Es ist sehr notwendig. Und hier ist der Grund: Wenn jemand kein Geld hat, ist er gezwungen, zur Arbeit zu gehen und etwas „Dummes“ zu tun. Ein Mensch verbringt 10 Stunden am Tag damit, Geld zu verdienen, aber dadurch verwirklicht er sich selbst nicht. Der Chef ist die Person, die sich auf Ihre Kosten verwirklicht. (Ich sage, was in den meisten Fällen passiert. Die meisten Menschen hassen ihren Job, aber sie arbeiten, weil sie Geld zum Überleben brauchen.)

Materielle Dinge schaffen Trost für die Seele. Materielle Dinge gestalten diese Welt für die Seele. Es ist für die Seele viel angenehmer, Meisterwerke an Orten zu schaffen, die sie inspirieren. Es ist viel besser, ein Bild in einem Haus am Meer zu malen als in einer „Müllgrube“. Die Seele braucht Frieden und Trost, um erschaffen zu können. Aber welchen Frieden kann es geben, wenn die Familie nicht genug Geld hat und sich Mann und Frau jeden Tag darüber streiten.

Die Seele braucht Zeit, um sich auszudrücken. Erst nach einiger Zeit kann der von der Seele geschaffene Wert für Hunderte oder sogar Tausende Male mehr verkauft und verkauft werden, als ein Mensch bei der Arbeit erhält. Aber es braucht Zeit, um einen solchen Wert zu schaffen. Ich persönlich habe 5 Monate gebraucht, um ein mageres Einkommen zu erzielen. Nach 8 Monaten begann meine Website Einnahmen zu erwirtschaften, von denen eine arme Familie bereits leben konnte. Und erst nach 17 Monaten begann meine Website Einnahmen zu generieren, die bereits die Einnahmen aus einem sehr gut bezahlten Job ersetzen werden.

Es dauerte 17 Monate, den Job zu ersetzen. Aber jetzt bin ich frei! Ich mache das, was ich liebe, und das ist erst der Anfang. Meinen Träumen sind keine Grenzen gesetzt, und das bedeutet, dass auch mir keine Grenzen gesetzt sind. Wenn Sie Ihr eigenes Unternehmen führen, wird Ihr Einkommen nur durch Ihre Vorstellungskraft und nichts weiter begrenzt. Wer verdient 1.000.000 Dollar pro Jahr bei der Arbeit? Ja, vielleicht gibt es ein paar. Aber wenn Sie sich um Ihre eigenen Angelegenheiten kümmern, ist auch dies keine Kapelle.
Materielle Dinge sind wichtig, aber nur, um die Bedürfnisse des Lebens zu befriedigen.

Ich bin ehrlich: Ohne Einkommen ist es schwieriger, Meisterwerke zu schaffen und zu schaffen. Der Verstand sagt ständig: „Was du tust, ist gut, aber wofür werden wir leben?“ Und diese Frage lenkt ständig und stark von der Kreativität ab. Er nimmt uns unser Glück. Um diesen Dialog auszuschalten, muss Ihre Lieblingsbeschäftigung Geld bringen. Natürlich beginnt der Verstand dann, andere Fragen zu stellen, aber je mehr Geld Ihr Lieblingsgeschäft einbringt, desto weniger schmerzhaft und ablenkend werden diese Fragen.

Oft arbeiten Menschen im Beruf, verdienen Geld, haben aber auch Hobbys. Was ist ein Hobby?
Ein Hobby ist eine Beschäftigung für die Seele, die kein Einkommen generiert. Aber warum nicht ein Hobby zum Beruf machen? Die glücklichsten Menschen sind diejenigen, deren Hobby ihr Beruf ist. Sie tun ununterbrochen, was sie lieben.
Bei allem, worüber ich spreche, über Arbeit, über Geld, möchte ich Ihnen zwei wichtige Gedanken vermitteln: 1) Seele und Geist müssen im Einklang sein
2) Das Immaterielle sollte immer an erster Stelle stehen

Der Fokus sollte nur auf dem Immateriellen liegen! Die Folge sind materielle Dinge. Hier sind die richtigen Lebensprioritäten:
Glück -> Gesundheit -> Reichtum Und viele Menschen leben nach diesem Schema
Reichtum -> Gesundheit -> Glück
Und was noch schlimmer ist: Es gibt Menschen, die nach diesem Schema leben
Reichtum->Reichtum->Reichtum

Kein Wunder, dass sie nicht glücklich sind. Diese Menschen haben Millionen, aber sie haben keine Freunde, sie haben Probleme in ihrer Familie. Sie haben Probleme im Umgang mit Menschen. Weil sie denken, dass alle Menschen, die sie umgeben, nur wegen ihres Geldes bei ihnen sind und nichts weiter. Ich weiß nicht, wie es dir geht, aber solch ein Glück würde ich nicht wollen. Wenn die Prioritäten im Leben richtig gesetzt werden, entsteht als Konsequenz Reichtum. Es hat keinen Sinn, sich auf ihn zu konzentrieren. Ein hohes Maß an Glück und Gesundheit führt zwangsläufig zu einem hohen Einkommen.

Materielle Dinge und unser Reichtum können nur als Ergänzung zu unserem Glück dienen. Sie können nicht als Grundlage dienen. Was die Grundlage ist, haben wir oben bereits besprochen.

Stepan Ovchinnikov, INTERVOLGA

Firma: INTERVOLGA
Gründungsjahr: 2003
Partnerstatus: Gold, Liste der für große Implementierungen empfohlenen Unternehmen
Wie viele Jahre mit 1C-Bitrix: 7 Jahre
Spezialisierung: technologisch komplexe Websites, Online-Shops, Unternehmensportale, persönliche Konten.

Erfolge:

  • Seit 2011 jedes Jahr das erste im südlichen Bundesdistrikt
  • Wir sind auf der Liste der von 1C-Bitrix empfohlenen Unternehmen für große Implementierungen
  • Wir unterhalten einen thematischen Blog über Webentwicklung und Internetmarketing mit einem Traffic von bis zu 800 Personen pro Tag
  • Das Unternehmen beschäftigt 50 Mitarbeiter
Die Geschichte eines kleinen regionalen Unternehmens, das aufgrund der richtigen Strategie- und Technologiewahl wachsen konnte.

Das Unternehmen wurde 2003 von einem Wolgograder Anwalt gegründet, der nichts mit Webtechnologien und -entwicklung zu tun hatte. Es schien ihm, dass es keine guten Websites und keine Informationsreferenzsysteme gab. Er gründete ein Webstudio, um ein regionales Hilfesystem aufzubauen und in Zukunft an anderen Projekten zu arbeiten.

Als ich 2005 anfing zu arbeiten, hatte Intervolga mehr als hundert Websites erstellt. Natürlich waren sie nach heutigen Maßstäben primitiv. Wir haben andere Bereiche ausprobiert. Wir haben kein Internetmarketing gemacht, sondern nur SEO.

Im Jahr 2006 wurde ich kaufmännischer Leiter. In den ersten Jahren machten wir weiter mit dem, womit wir begonnen hatten: der Entwicklung von Wolgograd-Websites. Damals gab es keine ausländischen Kunden.

In den Jahren 2009–2010 kam es im Unternehmen zu großen Veränderungen, die mit dem Beginn einer langwierigen Wirtschaftskrise einhergingen. Ich begann zu delegieren. Bisher habe ich alle Projekte selbst geleitet.

Zuvor hatte das Unternehmen einen Programmierer, der die Aufgaben von zwei Managern bearbeitete, und das hat uns gereicht. Der Austausch von Programmierern geschah folgendermaßen: Ein oder zwei Jahre lang arbeiteten die Leute und gingen dann wieder, und jedes Mal änderten wir die Codekultur. Mir wurde klar, dass der Austausch eines Programmierers ein großes Problem darstellt. Ungefähr zu diesem Zeitpunkt fand ein Gespräch mit Sergei Ryzhikov statt. Er fragte: „Warum schreiben Sie nicht über 1C-Bitrix?“


Die Inkubationszeit dauerte etwa ein Jahr – wir erstellten gleichzeitig Websites mit unserem alten Softwarecode, 1C-Bitrix und UMI. Wir haben sechs bis acht Websites auf 1C-Bitrix erstellt, bevor wir uns entschieden haben, nur mit dieser Plattform zu arbeiten. Dann ergab sich die Gelegenheit, weitere Programmierer einzustellen, und 2010 waren zwei davon im Unternehmen. Und dann haben wir gelernt, damit umzugehen und die Streaming-Arbeit etabliert.

Dementsprechend hat sich die Struktur der Dienstleistungen verändert. Zuvor haben wir einfache Websites erstellt, und selbst ein Online-Shop mit Bestellkorb und Autorisierung war für uns eine technisch schwierige Aufgabe.

Auf Seminaren habe ich den Leuten erklärt, dass sie keinen Online-Shop brauchen, sondern nur ein Katalog mit Bestellformular. Ich habe das nur gemacht, weil wir bei komplexen Aufgaben schlecht waren. Dann haben wir gelernt, dass man alles Grundlegende von 1C-Bitrix übernimmt und alles, was nicht trivial ist, selbst macht.

Über Spezialisierung

Für den regionalen Distributor von Shell haben wir einen großen Online-Shop erstellt. Ihre Datenbank ist mit der Datenbank aller Fahrzeuge integriert, die theoretisch mit ihren Komponenten ausgestattet werden könnten. Dabei handelt es sich um mehrere tausend Gerätemodelle, die jeweils mit entsprechenden Shell-Produkten angeboten werden.

Wir haben ein Auswahlformular erstellt. Dieses Problem ist technischer Natur – es erfordert eine Lösung durch Programmierer, aber wenn wir mit 1C-Bitrix arbeiten, lösen wir genau dieses Problem. Und wenn wir weiterhin in unserem eigenen Code schreiben würden, wären wir nicht in der Lage, Standardaufgaben zu lösen, die bereits in 1C-Bitrix vorhanden sind – zum Beispiel „Warenkorb“, „Suche“, „Zur Kasse“, Integration mit „1C“ und andere . Wir arbeiten jetzt direkt an nicht standardmäßigen Dingen.

Wir haben eines der starken Projekte – „Alfa Bank Clients Club“. Wir machen es auf 1C-Bitrix mit dem Autorisierungs-Add-on „Bank-Client“. Diese Site verwendet nicht die 1C-Bitrix-Datenbank – sie wird über spezielle APIs mit den Speichermedien des Kunden integriert und empfängt Daten von dort.

Das coolste Projekt dieses Jahres ist ein persönliches Konto für EVRAZ-Kunden. Wir haben im Blog ausführlich beschrieben, wie wir es gemacht und organisiert haben.

Wir haben viele Fragen und Wünsche zu 1C-Bitrix als Plattform, aber aus geschäftlicher Sicht ist es eine Wunderpille.

Über das Vertrauen der Kunden

Ich glaube nicht, dass unser Weg der einzig richtige ist, aber wir haben immer versucht, einen guten Job zu machen. Sie übernehmen ein einfaches Projekt, machen es langsam, aber gut. Nach und nach erreichst du ein höheres Niveau und die Leute bemerken dich. Sie erhalten neue Bestellungen.

Wie ist Ryzhikov auf uns aufmerksam geworden – ein mikroskopisch kleines, elendes Regionalstudio? Ich habe ein Dutzend Artikel über Habré geschrieben, die uns aufgefallen sind. Die Alfa Bank kam mit einer direkten Frage auf uns zu: „Warum macht ihr, ihr so ​​gutaussehenden und klugen Jungs, nicht an unserer Ausschreibung teil?“ Und wir haben mitgemacht.

Wir können nicht massiv werben, heiße Leads bekommen und ein Projekt schnell abschließen. Wir übernehmen keine Projekte, die mehr als eineinhalb Mal komplexer und größer sind als die vorherigen. Wir verstehen, dass es qualitative Unterschiede geben wird, für die wir noch nicht bereit sind. Deshalb entwickeln wir uns langsam.

Wir berechnen die Komplexität von Projekten in Mannstunden. Wir können das Projekt schnell bewerten – ein oder zwei Werktage. Es gibt eine Maßeinheit namens „hochentwickeltes Geschäft“ – 700–800–1000 Arbeitsstunden. Es kann zwei oder mehr „anspruchsvolle Geschäfte“ geben.

Wir nutzen keine Umlauflösungen – wir haben noch nicht herausgefunden, wie wir damit Geld verdienen können. Deshalb arbeiten wir nur im Outsourcing – wir erledigen unsere Arbeit selbst für einzelne Kunden.

Es gab eine Zeit, in der wir in Wolgograd drei konkurrierende Elektrowerkzeuggeschäfte eröffneten. Solche konkreten Projekte gibt es noch heute, zum Beispiel den Online-Shop für Industrieelektronik von Siemens, ABB, Schneider Electric. Sie haben viele Händler und jeder möchte einen coolen Online-Shop haben.

Manchmal kommen Kunden in Scharen zu uns: Eine Seite hat ihnen gefallen, und alle wollen die gleiche. Aber wir treffen mit allen eine Vereinbarung. Zirkulation ist nichts für uns.

Wir haben mehrere Module für den Marktplatz erstellt. Sie sind sehr einfach, sie haben sich aufgrund ihrer Einfachheit um ein Vielfaches amortisiert: Wir haben 20-30 Stunden Arbeit investiert und dieses Modul 100 Mal verkauft.

So deklarieren Sie sich

Seit 2009 veranstalten wir jedes Jahr, teilweise auch mehrmals im Jahr, Seminare – selbst und gemeinsam mit 1C-Bitrix. Die ersten zehn Male habe ich es gemacht, dann hat es einer der Abteilungsleiter gemacht. Jetzt hat das Team einen Vorgesetzten, der an Seminaren beteiligt ist.

Wir beteiligen uns an fast allen Programmen, Ratings und Qualitätsüberwachungen. Wir schreiben Fälle über jede mehr oder weniger auffällige Arbeit. Ich bin stolz darauf, dass unsere Website zu den Informationen unserer Partner zum Thema Bitrix24 und möglicherweise auch zu 1C-Bitrix: Site Management gehört.

Warum machen wir das? Das steigert unser Niveau. Wir arbeiten die geleistete Arbeit durch, denken darüber nach und fassen sie in einem Artikel zusammen. Das ist PR – die Leute lesen.

Die Intervolga-Website, die wir in unserer Freizeit pflegen, hat 800 Besucher pro Tag, 80 % davon sind Suchanfragen mit geringer Häufigkeit. Das heißt, ein Blog mit 250 Artikeln wird täglich von etwa 650 Personen besucht. Wir sind keine Journalisten, aber Artikel bringen guten Traffic.

Ich habe mehr als einmal an Ausstellungen am 1C-Bitrix-Stand teilgenommen. Wir haben auch selbst an Ausstellungen teilgenommen. Um ehrlich zu sein, bin ich ein wenig enttäuscht von ihnen – sie geben weder Kunden noch PR, sondern reden nur. Wenn Sie herausfinden möchten, was die Leute denken, nehmen Sie an Ausstellungen teil.

Ich hatte einmal so einen Fall: Ich habe in zwei Tagen mit 172 Menschen gesprochen. Am Ende des Tages wurde mir klar, dass ich nicht einmal einen Satz zu Ende bringen konnte. Aber über konkrete Aufgaben zu sprechen, führt nicht zu Verkäufen, deshalb werden wir keine Ausstellungen mehr besuchen.

Aber wir lieben alle Seminare oder öffentlichen Veranstaltungen, bei denen man etwas Gutes sagen und erzählen kann. Wir treten kostenlos auf, die einzigen Kosten sind Tickets nach Moskau. Wir versuchen, jede Gelegenheit für PR zu nutzen.

Es ist nützlich, wenn ein Unternehmen von Wettbewerbern beworben wird – wir werden oft für die Implementierung von Bitrix24 empfohlen. Aber es ist besser, bei den Kunden für sich zu werben, und man muss sie woanders akquirieren. Zu diesem Zweck haben wir an spezialisierten technischen Ausstellungen teilgenommen – zum Beispiel „MetalExpo“, „Automotive Components“ in Toljatti.

Es gibt wirklich ein Feld ungepflügter Kunden, aber das Problem ist, dass es sich dabei um „kalte“ Leads handelt. Sie verstehen nicht, was sie wollen. Um sie zum Verkauf anzubieten, müssen Sie ein Jahr lang mit jedem einzelnen kommunizieren. Dafür sind wir aber nicht bereit, wir bevorzugen „warme“. Wir bekommen sie durch Content-Marketing.

Das ist praktisch die einzige Marketingmethode, die wir nutzen: Wir schreiben Artikel, schreiben Fälle, ziehen Leute an und nehmen Anfragen entgegen – von drei bis fünf pro Arbeitstag. Neue. Das ist viel, es ist ziemlich schwierig, sie zu verarbeiten.

Beratung

Man muss ständig versuchen, die Preise zu erhöhen. Irgendwann wird Ihnen der Markt sagen, dass Sie die Preise nicht mehr erhöhen können, sondern weitermachen müssen. Bringen Sie Ordnung in die Infrastruktur, reduzieren Sie Verluste und steigern Sie die betriebliche Effizienz. Jetzt sind wir immer noch mit Skaleneffekten konfrontiert. Wir beschäftigen mehr als 50 Mitarbeiter und ein so großes Team könnte in einem Chaos nicht bestehen.

Im Inneren müssen Sie die Produktionskapazitäten und die Qualifikationen der Mitarbeiter überwachen, um Programmierer kämpfen, die Gehälter erhöhen – um sicherzustellen, dass das Unternehmen nicht auseinanderfällt.

Alexey Saminsky, ein Berater, formuliert dies im Allgemeinen äußerst hart:

„Wenn Sie Probleme haben, die zu Verlusten führen, oder wenn Sie mit Ihrer Arbeitsweise unzufrieden sind, müssen Sie zunächst die Preise um 40 Prozent erhöhen, dann 40 Prozent der Mitarbeiter entlassen und sich erst dann mit Qualitätsproblemen befassen.“ Wenn du es umgekehrt machst, wirst du definitiv sterben.“

Psychische Trägheit steht oft im Weg. Zweimal habe ich Projekte übernommen, deren Umfang damals so groß erschien, dass man für das Geld alles machen konnte. Psychologische Einstellungen, die es Ihnen nicht ermöglichen, das, was Sie tun, angemessen zu betrachten, sind gefährlich.

Als ich 2009 anfing zu arbeiten, betrug der Grundpreis für eine Website bei Intervolga 11–16, vielleicht 20.000 Rubel. Es war eine Website mit Design, Code, CMS, Anweisungen, Verwaltung – für 20.000 Rubel. Lag das durchschnittliche Niveau damals bei 15.000 Rubel, kosten Websites heute das 10- bis 20-fache mehr. Dies ist der Mindeststandard für Online-Shops, die wir derzeit erstellen. Bei einer „Auflage“ – 150, bei einer Sonderanfertigung – 350.000.

Psychische Einschränkungen hindern viele daran, das zu tun, was sie gestern nicht getan haben. Ich glaube nicht, dass ich mich von ihnen unterscheide. Ich entdecke immer wieder Blockaden in mir, die mich daran hindern, den nächsten Schritt zu gehen. Ich versuche ständig, sie zu beseitigen, indem ich mit klugen Leuten spreche. Es gilt, interne Barrieren abzubauen und den Bekanntheitsgrad zu erhöhen.

). Die Cloud ist darauf ausgelegt, verschiedene PHP-Skripte nach einem Zeitplan oder über eine API auszuführen. In der Regel verarbeiten diese Skripte Warteschlangen und die Last wird auf etwa 100 Server „verteilt“. Zuvor haben wir uns auf die Implementierung der Steuerlogik konzentriert, die dafür verantwortlich ist, die Last gleichmäßig auf eine solche Anzahl von Servern zu verteilen und Aufgaben nach einem Zeitplan zu generieren. Darüber hinaus mussten wir jedoch einen Daemon schreiben, der in der Lage ist, unsere PHP-Skripte in der CLI auszuführen und den Status ihrer Ausführung zu überwachen.

Er wurde ursprünglich in C geschrieben, wie alle anderen Dämonen in unserem Unternehmen. Wir waren jedoch mit der Tatsache konfrontiert, dass ein erheblicher Teil der Prozessorzeit (ca. 10 %) im Wesentlichen verschwendet wurde: das Starten des Interpreters und das Laden des „Kerns“ unseres Frameworks. Um den Interpreter und unser Framework nur einmal initialisieren zu können, wurde daher beschlossen, den Daemon in PHP neu zu schreiben. Wir nannten es PHP Felsen syd (ähnlich Phproxyd – PHP Proxy Daemon, ein C-Daemon, den wir zuvor hatten). Es akzeptiert Anfragen zum Ausführen einzelner Klassen und führt bei jeder Anfrage eine fork() aus und ist außerdem in der Lage, den Ausführungsstatus jeder Ausführung zu melden. Diese Architektur ähnelt in vielerlei Hinsicht dem Apache-Webservermodell, bei dem die gesamte Initialisierung einmal im „Master“ erfolgt und die „Kinder“ mit der Verarbeitung der Anfrage beschäftigt sind. Als zusätzlichen Bonus erhalten wir die Möglichkeit, den Opcode-Cache in der CLI zu aktivieren, was ordnungsgemäß funktioniert, da alle untergeordneten Prozesse denselben gemeinsamen Speicherbereich wie der Masterprozess erben. Um Verzögerungen bei der Verarbeitung einer Startanfrage zu reduzieren, können Sie fork() im Voraus ausführen (Prefork-Modell), aber in unserem Fall betragen die Verzögerungen für fork() etwa 1 ms, was uns recht gut passt.

Da wir den Code jedoch recht häufig aktualisieren, muss dieser Daemon auch häufig neu gestartet werden, da sonst der Code, der in ihn geladen wird, möglicherweise veraltet ist. Da jeder Neustart mit vielen Fehlern einhergehen würde, z Verbindung von Peer zurückgesetzt, einschließlich Denial-of-Service für Endbenutzer (der Daemon ist nicht nur für die Cloud, sondern auch für einen Teil unserer Website nützlich), haben wir beschlossen, nach Möglichkeiten zu suchen, den Daemon neu zu starten, ohne bereits bestehende Verbindungen zu verlieren. Es gibt eine beliebte Technik, die dazu verwendet wird anmutiges Nachladen für Daemons: fork-exec wird ausgeführt und ein Deskriptor vom Listen-Socket wird an das untergeordnete Element übergeben. Somit werden neue Verbindungen von der neuen Version des Daemons akzeptiert und alte mit der alten Version „modifiziert“.

In diesem Artikel werden wir uns eine kompliziertere Option ansehen. anmutiges Nachladen: Alte Verbindungen werden weiterhin von der neuen Version des Daemons verarbeitet, was in unserem Fall wichtig ist, da sonst der alte Code ausgeführt wird.

Theorie: Überlegen wir uns zunächst: Ist das möglich, was wir erreichen wollen? Und wenn ja, wie erreicht man das?

Da der Daemon auf dem POSIX-kompatiblen Linux läuft, stehen uns folgende Möglichkeiten zur Verfügung:

  • Alle geöffneten Dateien und Sockets sind Nummern, die der offenen Deskriptornummer entsprechen. Die Standardeingabe, die Standardausgabe und der Fehlerstrom haben die Deskriptoren 0, 1 bzw. 2.
  • Es gibt keine wesentlichen Unterschiede zwischen einer geöffneten Datei, einem Socket und einer Pipe (Sie können beispielsweise mit Sockets arbeiten, indem Sie sowohl die Systemaufrufe read/write als auch sendto/recvfrom verwenden).
  • Wenn der Systemaufruf fork() ausgeführt wird, werden alle offenen Handles geerbt, wobei ihre Nummern und Lese-/Schreibpositionen (in Dateien) erhalten bleiben.
  • Wenn der Systemaufruf execve() ausgeführt wird, werden auch alle offenen Handles geerbt und außerdem bleibt die PID des Prozesses erhalten und daher seinen untergeordneten Prozessen zugeordnet.
  • Die Liste der offenen Prozessdeskriptoren ist im Verzeichnis /dev/fd verfügbar, das unter Linux ein symbolischer Link zu /proc/self/fd ist.
  • Daher haben wir allen Grund zu der Annahme, dass unsere Aufgabe ohne großen Aufwand gelöst werden kann. Also fangen wir an. Patches für PHP Leider gibt es ein kleines Detail, das unsere Arbeit erschwert: In PHP gibt es keine Möglichkeit, die Dateideskriptornummer für Streams abzurufen und den Dateideskriptor nach Nummer zu öffnen (stattdessen eine Kopie der Datei). Der Deskriptor wird geöffnet, was für unseren Daemon nicht geeignet ist, da wir offene Handles sehr sorgfältig überwachen, um bei Neustarts und beim Starten von untergeordneten Prozessen keine Lecks zu erzeugen.

    Zuerst nehmen wir ein paar kleine Patches am PHP-Code vor, um die Möglichkeit hinzuzufügen, fd aus einem Stream abzurufen und sicherzustellen, dass fopen(php://fd/) keine Kopie des Handles öffnet (die zweite Änderung). ist mit dem aktuellen PHP-Verhalten nicht kompatibel, daher können Sie stattdessen eine neue „Adresse“ hinzufügen, zum Beispiel php://fdraw/):

    Patchcode

    diff --git a/ext/standard/php_fopen_wrapper.c b/ext/standard/php_fopen_wrapper.c index f8d7bda..fee964c 100644 --- a/ext/standard/php_fopen_wrapper.c +++ b/ext/standard/php_fopen_wrapper. c @@ -24,6 +24,7 @@ #if HAVE_UNISTD_H #include #endif +#include #include "php.h" #include "php_globals.h" @@ -296,11 +297,11 @@ php_stream * php_stream_url_wrap_php(php_stream_wrapper *wrapper, char *path, ch „Die Dateideskriptoren müssen nicht negative Zahlen sein, die kleiner als %d sind“, dtablesize); return NULL; ) - - fd = dup(fildes_ori); - if (fd == -1) ( + + fd = fildes_ori; + if (fcntl(fildes_ori, F_GETFD) == -1) ( php_stream_wrapper_log_error(wrapper, Optionen TSRMLS_CC, - "Fehler beim Duplizieren des Dateideskriptors %ld; möglicherweise ist dies der Fall 't "t exist: " + "Dateideskriptor %ld ungültig: " "[%d]: %s", fildes_ori, errno, strerror(errno)); return NULL; ) diff --git a/ext/standard/ streamsfuncs. c b/ext/standard/streamsfuncs.c index 0610ecf..14fd3b0 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -24,6 +24,7 @ @ # include „ext/standard/flock_compat.h“ #include „ext/standard/file.h“ #include „ext/standard/php_filestat.h“ +#include „ext/standard/php_fopen_wrappers.h“ #include „php_open_temporary_file .h " #include "ext/standard/basic_functions.h" #include "php_ini.h" @@ -484,6 +485,7 @@ PHP_FUNCTION(stream_get_meta_data) zval *arg1; php_stream *stream; zval *newval; + int tmp_fd ; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &arg1) == FAILURE) ( return; @@ -502.6 +504.9 @@ PHP_FUNCTION(stream_get_meta_data) add_assoc_string(return_value, "wrapper_type", ( char *)stream-> Wrapper->Wops->Label, 1); ) add_assoc_string(return_value, "stream_type", (char *)stream->ops->label, 1); + if (SUCCESS == php_stream_cast(stream, PHP_STREAM_AS_FD_FOR_SELECT | PHP_STREAM_CAST_INTERNAL, (void*)&tmp_fd, 1) && tmp_fd != -1) ( + add_assoc_long(return_value, "fd", tmp_fd); + ) add_assoc_string(return_value, "mode ", stream->mode, 1);


    Wir haben das fd-Feld zum von stream_get_meta_data() zurückgegebenen Ergebnis hinzugefügt, wenn es sinnvoll ist (z. B. ist das fd-Feld für Zlib-Streams nicht vorhanden). Wir haben auch den dup()-Aufruf des übergebenen Dateideskriptors durch eine einfache Überprüfung ersetzt. Leider funktioniert dieser Code nicht ohne Änderungen unter Windows, da der Aufruf von fcntl() POSIX-spezifisch ist und der vollständige Patch daher zusätzliche Codezweige für andere Betriebssysteme enthalten muss. Ein Daemon ohne Neustartfähigkeit. Schreiben wir zunächst einen kleinen Server das in der Lage sein wird, Anfragen im JSON-Format anzunehmen und eine Antwort zu geben. Beispielsweise wird die Anzahl der Elemente im Array zurückgegeben, die in der Anfrage eingegangen sind.

    Der Daemon lauscht auf Port 31337. Das Ergebnis sollte etwa so aussehen:

    $ telnet localhost 31337 Versuche 127.0.0.1... Verbunden mit localhost. Das Escape-Zeichen ist „^]“. ("hash":1) # Benutzereingabe „Anfrage hatte 1 Schlüssel“ („hash“:1,“cnt“:2) # Benutzereingabe „Anfrage hatte 2 Schlüssel“

    Wir verwenden stream_socket_server(), um mit dem Abhören eines Ports zu beginnen, und stream_select(), um zu bestimmen, welche Handles zum Lesen/Schreiben bereit sind.

    Einfacher Implementierungscode (Simple.php)



     


    Lesen:



    Beheben Sie SSL-Verbindungen und was der Fehler bedeutet

    Beheben Sie SSL-Verbindungen und was der Fehler bedeutet

    Manchmal treten bei jedem Browser Probleme auf. Opera ist keine Ausnahme, wenn SSL-Fehler auftreten können. Bevor...

    Welche Programme werden nach der Installation von Windows benötigt?

    Welche Programme werden nach der Installation von Windows benötigt?

    Hallo Freunde! Das Finden und Installieren von Treibern ist für viele unerfahrene PC-Benutzer ein echtes Problem. In diesem Artikel...

    Ist es möglich herauszufinden, wer Sie in Ihren VKontakte-Lesezeichen hat?

    Ist es möglich herauszufinden, wer Sie in Ihren VKontakte-Lesezeichen hat?

    Es gibt viele frei verfügbare Informationen zu VK-Lesezeichen. Es lohnt sich, sich an die Funktion zu erinnern, mit der Sie sich die erforderlichen Informationen merken und aufrufen können.

    So löschen Sie einen Tweet oder Retweet auf Twitter. So löschen Sie einen Tweet

    So löschen Sie einen Tweet oder Retweet auf Twitter. So löschen Sie einen Tweet

    Stellen wir uns eine Situation vor: Sie scrollen durch Ihren Twitter-Feed und stoßen plötzlich auf einen Tweet, der Sie wirklich interessiert. Es könnte etwas sein...

    Feed-Bild RSS