Pywebsocket - Apache httpd.conf richtig einstellen

Guten Tag,

Vor ein paar Tagen las ich diesen Artikel:
http://www.heise.de/ix/meldung/Erste-Implementierung…

Hört sich für mich interessant an und deswegen
wollte ich das auch mal ausprobieren.

Um zu vermeiden das es wegen einer zu alten Apache Version nicht funktioniert habe ich mir die neueste Xampp Version runtergeladen und installiert.

Da man für websockets Python braucht habe ich Python installiert und mod_python als Apache Modul.

Ein Test hat gezeigt das das funktioniert.

Nun habe ich mir pywebsocket runtergeladen und
auf die Festplatte kopiert und zwar nach C:\mod_pywebsocket

Auf der Google Seite wo man pywebsocket downloaden kann gibt es einen Link dem man folgen soll wenn
man pywebsocket als Apache Modul einrichten möchte :

[http://code.google.com/p/pywebsocket/source/browse/t…](http://code.google.com/p/pywebsocket/source/browse/trunk/src/mod_pywebsocket/ init.py)

Darin heisst es

" … If mod_pywebsocket is not in the Python path, specify the following. … "

Ich habe mod_pywebsocket mal in das Pythonverzeichnis gepackt und es hat nicht funktioniert. Nun liegt der Ordner mod_pywebsocket auf C:\

Dann weiter steht dort:

"… Example snippet of httpd.conf:
(mod_pywebsocket is in /websock_lib, Web Socket handlers are in
/websock_handlers, port is 80 for ws, 443 for wss.)

PythonPath „sys.path+[’/websock_lib’]“
PythonOption mod_pywebsocket.handler_root /websock_handlers
PythonHeaderParserHandler mod_pywebsocket.headerparserhandler
…"

Das muss ich in die Datei httpd.conf ( …\Apache\conf) eintragen.

Da ich nicht einmal durch Google herausgefunden habe was sys.path angibt habe ich den direkten Pfad angegeben zu dem Order mod_pywebsocket in dem die pywebsocket Dateien drin sind.

Die Websock Handlers die oben angesprochen sind , sind die eigen geschrieben Handler die benutzt werden sollen. Den Pfad dazu soll man angeben.

Im mod_websocket Ordner befindet sich ein Unterordner namens example mit 2 Dateien zum testen ob es funktioniert.

Mein Versuch sah dann so aus:

PythonPath „[‚C:/mod_pywebsocket‘]“
PythonOption mod_pywebsocket.handler_root /example
PythonHeaderParserHandler mod_pywebsocket.headerparserhandler

Der Pfad bei PythonPath ist so richtig, geb ich ihn falsch ein kommt eine Fehlermeldung im Browser beim Aufruf der Seite und diese sagt das das nicht
der mod_pywebsocktet Ordner ist.

Schonmal ein Problem weniger :wink:

Was mich nun irritiert ist das ich den Handler Pfad /example eingebe(n soll).

So sieht der Aufruf aus. Das ist Javascript.
ws ist das websocket Protokoll.

if („WebSocket“ in window) {

var ws = new WebSocket(„ws://localhost/websocket/echo“);

alert(ws.readyState);
ws.onopen = function() {
// Web Socket is connected. You can send data by send() method.
alert(„hi“);
ws.send(‚1,1‘);
};

alert(ws.readyState);
ws.onmessage = function (evt) { var received_msg = evt.data; alert(received_msg); };
ws.onclose = function() {
alert(„websocket is closed.“); };

} else {
alert(„the browser doesn’t support WebSocket.“);
}

Im mod_pywebsocket/example Ordner und im …/htdoc/websocket Ordner befinden die gleichen Dateien und zwar

echo_client.py und echo_wsh.py

Letztere kommuniziert beim Aufruf mit echo_client.py

Ich habe oben im Javascript (zumindest den letzten Teil ) des Pfades nicht falsch eingegeben denn
_wsh.py sollte automatisch angefügt werden so
steht es in der Installtion Beschreibung.

Nur ein ws://echo hat auch nicht funktioniert
und zur Sicherheit falls es doch nicht angehangen werden sollte noch mal das selbe nur mit echo_wsh.py

Ohne Erfolg.

Im Javascript habe ich auch mal einige
alert(ws.readyState); platziert.
Das gibt nämlich den Status aus.

Dieser ist nur 0 oder 2 aber 1 ist gewollt.

0 - nich verbunden
1 - verbunden
2 - konnte nicht verbinden / verbindung geschlossen

Im Javascript gibt es auch ein alert(„hi“); doch dieses wird nie angezeigt denn es kommt gar nicht zu ws.onopen

Ich hoffe mir kann jemand helfen.

Wer das ganze selbst mal probieren möchte findet alle nötigen Links im Artikel welcher ganz oben angegeben ist.

Ich bin über jeden Tipp dankbar , ich such schon seit mehreren Tagen eine Lösung und weder Google noch irgendwelchen Foren konnten mir helfen.

Einen Guten Morgen wünsche ich.

Hi,

so wahnsinnig gut kenne ich mich mit Python nicht aus, aber macht das nicht
PythonPath „sys.path+[’/websock_lib’]“
ein zusätzliches Element in einem Array ?

Also das du
PythonPath „sys.path+[‚C:/mod_pywebsocket‘]“

schreiben müsstest, das der die Systembibiotheken noch findet ?

Steht irgendwas im error_log des Apache ?

Alexander

Hi,

sorry, ich hab’ leider auch keine Idee.

Viel Erfolg.

Hab ich nun mal probiert mit
PythonPath „sys.path+[‚C:/mod_pywebsocket‘]“

scheint auch zu funktionieren zumindest gibt es keinen Fehler auch in den logs nicht.

Mal in die error logs gucken - hätt ich acuh selbst drauf kommen können
Danke für den Hinweis.

So hab da folgende Fehler gefunden und zwar unter bestimmten umständen.

in der new WebSocket() ,als url ws://localhost/websocket/echo_wsh.py

[Mon Dec 14 11:35:20 2009] [warn] [client ::1] mod_pywebsocket: No handler for: ‚/websocket/echo_wsh.py‘

new WebSocket(), als url ws://localhost/websocket/echo

[Mon Dec 14 11:40:23 2009] [warn] [client ::1] mod_pywebsocket: No handler for: ‚/websocket/echo‘

[Mon Dec 14 11:40:23 2009] [error] [client ::1] File does not exist: C:/xampp/xampp/htdocs/websocket/echo

[Mon Dec 14 11:40:23 2009] [warn] [client ::1] mod_pywebsocket: No handler for: ‚/error/HTTP_NOT_FOUND.html.var‘

Also wird wohl nicht Automatisch _wsh.py angehangen an die URL wie ich von ausging.
Solltes es aber (siehe link im ersten Post - pywebsocket als Apachde Modul)

Im acess.log steht , wenn ich bei new WebSocket() als URL ws://localhost/websocket/echo_wsh.py

1 - - [14/Dec/2009:11:47:33 +0100] „GET /websocket/echo_wsh.py HTTP/1.1“ 200 12 „-“ „-“

und im error.log dann wie gesagt

[Mon Dec 14 11:47:33 2009] [warn] [client ::1] mod_pywebsocket: No handler for: ‚/websocket/echo_wsh.py‘

Wie kann ich nun weiter vorgehen um meine Fehlerquelle einzukreisen oder sie gar direkt zu entdecken?

Hallo,

PythonPath „sys.path+[‚C:/mod_pywebsocket‘]“
in der new WebSocket() ,als url
ws://localhost/websocket/echo_wsh.py

gibt es denn
C:/mod_pywebsocket/websocket/echo_wsh.py überhaupt ?

So wie ich das gelesen habe hängt er ans Basisverzeicnis die URL an und sucht da nach dem Handler.

Alexander

Das ist der Pfad
C:\mod_pywebsocket

darin enthaltene Ordner

mod_pywebsocket (handshake.py usw)
example ( echo_whs.py, echo_client.py )
test (test_handshake.py/ _dispatch.py usw)

Benutz ich

PythonPath „[‚C:/mod_pywebsocket‘]“
PythonOption mod_pywebsocket.handler_root /mod_pywebsocket
PythonHeaderParserHandler mod_pywebsocket.headerparserhandler

Bekomm ich im Error log folgendes:

[Tue Dec 15 11:00:04 2009] [warn] mod_pywebsocket: /mod_pywebsocket\example\echo_wsh.py: Error in sourcing handler:Traceback (most recent call last):\n File „C:/mod_pywebsocket\mod_pywebsocket\dispatch.py“, line 99, in _source\n exec source_str in global_dic\n File „“, line 31, in \n File „C:\Python25\mod_pywebsocket\msgutil.py“, line 40, in \n import Queue\nImportError: No module named Queue\n
[Tue Dec 15 11:00:04 2009] [warn] mod_pywebsocket: /mod_pywebsocket\mod_pywebsocket\echo_wsh.py: Error in sourcing handler:Traceback (most recent call last):\n File „C:/mod_pywebsocket\mod_pywebsocket\dispatch.py“, line 99, in _source\n exec source_str in global_dic\n File „“, line 31, in \n File „C:\Python25\mod_pywebsocket\msgutil.py“, line 40, in \n import Queue\nImportError: No module named Queue\n
[Tue Dec 15 11:00:04 2009] [warn] mod_pywebsocket: /mod_pywebsocket\mod_pywebsocket\test\testdata\handlers\blank_wsh.py: web_socket_do_extra_handshake is not defined.
[Tue Dec 15 11:00:04 2009] [warn] mod_pywebsocket: /mod_pywebsocket\mod_pywebsocket\test\testdata\handlers\sub\non_callable_wsh.py: web_socket_do_extra_handshake is not callable.
[Tue Dec 15 11:00:04 2009] [warn] mod_pywebsocket: /mod_pywebsocket\mod_pywebsocket\test\testdata\handlers\sub\wrong_handshake_sig_wsh.py: web_socket_do_extra_handshake is not defined.
[Tue Dec 15 11:00:04 2009] [warn] mod_pywebsocket: /mod_pywebsocket\mod_pywebsocket\test\testdata\handlers\sub\wrong_transfer_sig_wsh.py: web_socket_transfer_data is not defined.
[Tue Dec 15 11:00:04 2009] [warn] mod_pywebsocket: /mod_pywebsocket\test\testdata\handlers\blank_wsh.py: web_socket_do_extra_handshake is not defined.
[Tue Dec 15 11:00:04 2009] [warn] mod_pywebsocket: /mod_pywebsocket\test\testdata\handlers\sub\non_callable_wsh.py: web_socket_do_extra_handshake is not callable.
[Tue Dec 15 11:00:04 2009] [warn] mod_pywebsocket: /mod_pywebsocket\test\testdata\handlers\sub\wrong_handshake_sig_wsh.py: web_socket_do_extra_handshake is not defined.
[Tue Dec 15 11:00:04 2009] [warn] mod_pywebsocket: /mod_pywebsocket\test\testdata\handlers\sub\wrong_transfer_sig_wsh.py: web_socket_transfer_data is not defined.

weiter dann noch mal wieder

[Tue Dec 15 11:00:04 2009] [warn] [client ::1] mod_pywebsocket: No handler for: ‚/websocket/echo‘

Nur werd ich daraus nicht schlau

Zu merken sei das ich es je immer mit

new WebSocket(„ws://localhost/echo“);
und new WebSocket(„ws://localhost/websocket/echo“);
probiere

Meiner Meinung nach war oben das richtig, nur der Aufruf muss dem Pfad entsprechen, also

new WebSocket(„ws://localhost/example/echo“);

wenn das echo_whs.py in Unterverzeichnis „example“ liegt. Zumindest lese ich das so in der Doku…

Nein geht leider auch nicht.

Wenn ich

PythonPath „[‚C:/mod_pywebsocket‘]“
PythonOption mod_pywebsocket.handler_root „[‚C:/mod_pywebsocket/example‘]“
PythonHeaderParserHandler mod_pywebsocket.headerparserhandler

angebe krieg ich folgenden Fehler

[Tue Dec 15 12:56:50 2009] [warn] [client ::1] mod_pywebsocket: No handler for: ‚/websocket/echo_whs.py‘

Ich muss dafür aber
var ws = new WebSocket(„ws://localhost/websockte/echo_whs.py“);

angeben ansonsten kommt nur das die Datei nicht existiert

Danke für die Unterstützung. Wenn du noch irgendeine Idee hast immer her damit :wink:

Nein geht leider auch nicht.

So meinte ich das auch nicht.

Wenn ich

PythonPath „[‚C:/mod_pywebsocket‘]“

Hier stmal wieder wie oben, das er sys.path da mit hat, weil sonst findet er wahrscheinlich irgendwas anderes nicht.

PythonOption mod_pywebsocket.handler_root
„[‚C:/mod_pywebsocket/example‘]“

Das ist das Basispfad, da ohne exampe
PythonOption mod_pywebsocket.handler_root „[‚C:/mod_pywebsocket‘]“

Ich muss dafür aber
var ws = new
WebSocket(„ws://localhost/websockte/echo_whs.py“);

Und hier jetzt das example it einbauen,
var ws = new WebSocket(„ws://localhost/example/echo“);

Ggfs. probiere ich das auch mal selbst aus, aber im Moment habe ich leider nicht die Zeit dazu.

Sorry, Python kenne ich nicht und habe auch keine Zeit mich in das Problem hineinzuknien.

Viele Grüße
Ingrid

Guten Morgen,

leider habe ich diese Frage gerade erst gefunden. Ich hoffe, dass das Problem gelöst ist.

Gruß
Uli