2010-11-22 3 views
3

Il ya quelque temps, j'ai trouvé l'exemple de Joe Armstrong sur Erlang et websocket, mais je ne pouvais pas le faire fonctionner.Erlang et websockets

J'ai corrigé une erreur et quelques avertissements dans le code Erlang mais avec Apache je n'ai pas réussi à obtenir un bon résultat.

Quelqu'un peut-il me donner quelques conseils avec un exemple très simple? Ai-je besoin de mettre la page Web avec le JavaScript dans le répertoire Apache comme pour les fichiers PHP normaux?

+1

Il est plutôt difficile de donner de bons conseils, le flou de la question en tête. Il y a trois parties: 1. Le code Erlang, 2. Le code javascript, 3. Apache et sa configuration. Vous voudrez peut-être diviser le problème et obtenir une aide spécifique pour chacun d'entre eux. –

+0

oui vous avez raison, je cherchais un exemple très simple de page Web et erlang ... comme dans l'exemple de Joe – pdn

Répondre

8

L'exemple de websocket de Joe est obsolète et repose sur une version obsolète du protocole. Les navigateurs les plus récents utilisent une version plus récente (draft-00)

A ce jour, une implémentation erlang sympa est disponible depuis misultin. Testé et compatible avec les navigateurs actuels:

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

+2

Misultin a été fermé - et c'est dommage, c'était un cadre agréable. –

8

Le serveur Web Yaws fournit une implémentation websocket. J'ai également écrit un comportement pour simplifier l'écriture d'applications basées sur ws. Cela fait partie de mes outils Erlang (bien, le premier en fait):

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

3

Je trouve la bibliothèque SockJS-Erlang pour travailler à merveille. Mieux encore, il prend en charge les transports de repli si les Websockets ne sont pas disponibles. Il utilise Cowboy (bien qu'une version plus ancienne) comme serveur sous-jacent, ce qui est agréable car il est facile à intégrer. This escript et this HTML page vous donnera une démo de travail, vous pouvez jouer avec.

ici est un exemple annoté:

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

Mon conseil concernant Apache serait d'utiliser HAProxy pour vos connexions WebSocket et Apache pour servir Javascript et PHP.