2010-11-22 3 views
3

Некоторое время назад я нашел пример Джо Армстронга на Erlang и websocket, но я не мог заставить его работать.Erlang и websockets

Я исправил ошибку и пару предупреждений в коде Erlang, но с Apache я не смог получить хороший результат.

Может ли кто-нибудь дать мне несколько советов с очень простым примером? Нужно ли помещать веб-страницу с JavaScript внутри каталога Apache, как для обычных файлов PHP?

+1

Это довольно трудно дать хороший совет, неясность вопроса в виду. Есть три части: 1. Код Erlang, 2. Код javascript, 3. Apache и его конфигурация. Вы можете разбить проблему и получить конкретную помощь для каждого. –

+0

да, вы правы, я искал действительно простой пример как веб-страницы, так и erlang ... как в примере Джо – pdn

ответ

8

Пример веб-раскладки Joe устарел и использует устаревшую версию протокола. Современные браузеры используют более новую версию (draft-00)

На сегодняшний день хорошая реализация erlang доступна из-за неправильного использования. Протестировано и совместимо с существующими браузерами:

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

+2

Misultin был закрыт - и это позор, это была хорошая структура. –

8

Yaws веб-сервер обеспечивает реализацию WebSocket. Я также написал поведение для упрощения написания приложений на основе ws. Это часть моих инструментов Erlang (ну, первый один на самом деле):

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

3

Я нашел SockJS-Erlang библиотеку работать чудесно хорошо. Лучше всего он поддерживает резервные транспорты, если веб-узлы недоступны. Он использует Cowboy (хотя более старая версия) как базовый сервер, который хорош, потому что с ним легко интегрироваться. This escript и this HTML page предоставят вам рабочую демонстрацию, с которой вы сможете поиграть.

здесь аннотированный пример:

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

Мой совет относительно Apache будет использовать HAProxy для WebSocket соединений и Apache для обслуживания Javascript и PHP.