2010-11-22 3 views
3

Vor einiger Zeit fand ich Joe Armstrongs Beispiel auf Erlang und Websocket, aber ich konnte es nicht funktionieren.Erlang und websockets

Ich habe einen Fehler und ein paar Warnungen im Erlang-Code behoben, aber mit Apache konnte ich kein gutes Ergebnis erzielen.

Kann mir jemand ein wirklich einfaches Beispiel geben? Muss ich die Webseite mit dem JavaScript in das Apache-Verzeichnis einfügen, wie für normale PHP-Dateien?

+1

Es ist ziemlich schwierig, einen guten Rat zu geben, die Unklarheit der Frage im Hinterkopf. Es gibt drei Teile: 1. Der Erlang-Code, 2. Der Javascript-Code, 3. Apache und seine Konfiguration. Vielleicht möchten Sie das Problem lösen und spezifische Hilfe für jedes einzelne erhalten. –

+0

ja du hast recht, ich war auf der suche nach einem wirklich einfachen beispiel für webseite und erlang ... wie in joes beispiel – pdn

Antwort

8

Joes Websocket-Beispiel ist veraltet und beruht auf einer veralteten Version des Protokolls. Aktuelle Browser verwenden eine neuere Version (Entwurf-00)

Ab heute ist eine nette Erlang-Implementierung von Misultin verfügbar. Überprüft und kompatibel mit gängigen Browsern:

https://github.com/ostinelli/misultin/blob/master/src/misultin_websocket.erl

+2

Misultin wurde heruntergefahren - und das ist schade, es war ein schöner rahmen. –

8

Der Yaws Webserver bietet eine websocket Implementierung. Ich habe auch ein Verhalten geschrieben, um das Schreiben von ws-basierten Anwendungen zu vereinfachen. Es ist ein Teil meiner Erlang-Tools (na ja, der erste in der Tat):

https://github.com/schemeway/erlang-tools

3

Ich fand die SockJS-Erlang Bibliothek wunderbar gut zu funktionieren. Am besten unterstützt es Fallback-Transporte, wenn Websockets nicht verfügbar sind. Es verwendet Cowboy (obwohl eine ältere Version) als der zugrunde liegende Server, der schön ist, weil es einfach zu integrieren ist. This escript und geben Ihnen eine Arbeitsdemo, mit der Sie herumspielen können.

hier ist ein kommentiertes Beispiel:

start_link(_) -> 
    application:start(sockjs), 
    application:start(cowboy), 

    % generate a SockJS handler 
    SockjsState = sockjs_handler:init_state(
        <<"/browser_socket">>, fun handle_client/3, state, []), 

    % build the dispatch routes for Cowboy integrating the SockJS handler 
    Routes = [{'_', [{[<<"echo">>, '...'], 
         sockjs_cowboy_handler, SockjsState}]}], 

    % start the cowboy server 
    cowboy:start_listener(http, 100, 
          cowboy_tcp_transport, [{port,  8081}], 
          cowboy_http_protocol, [{dispatch, Routes}]), 

% called when a new client connects 
handle_client(Conn, init, state) -> {ok, state}; 

% called when data is received 
handle_client(Conn, {recv, Data}, state) -> 
    % reply to client 
    Conn:send(Data); 

% called when connection is closed 
handle_client(_Conn, closed, state) -> {ok, state}. 

Mein Rat in Bezug auf Apache HAProxy für WebSocket-Verbindungen und Apache für die Bedienung Javascript und PHP zu verwenden wäre.