2010-11-22 38 views
3

前段時間我發現了Joe Armstrong在Erlang和websocket上的例子,但是我無法得到它的工作。Erlang和websocket

我在Erlang代碼中修正了一個錯誤和一些警告,但是使用Apache我沒有得到一個好的結果。

任何人都可以給我一些提示一個非常簡單的例子嗎?我是否需要將網頁與Apache目錄中的JavaScript一起放入正常的PHP文件中?

+1

這是很難給出任何好的建議,頭腦中的問題模糊。有三個部分:1. Erlang代碼,2. JavaScript代碼,3. Apache及其配置。你可能想分解這個問題,併爲每一個問題尋求幫助。 – 2010-11-22 14:43:07

+0

是的,你是對的,我正在尋找一個非常簡單的例子,網頁和erlang ...在喬的例子 – pdn 2010-11-22 15:40:14

回答

8

Joe的websocket示例已過時,並依賴於該協議的過時版本。最新的瀏覽器使用更新的版本(draft-00)

截至今天,從misultin可以得到一個很好的erlang實現。經過測試,與當前的瀏覽器:

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

+2

Misultin已被關閉 - 這是一個恥辱,這是一個很好的框架。 – 2012-06-01 11:24:47

3

我發現SockJS-Erlang庫工作特棒。最重要的是,如果websocket不可用,它支持後備傳輸。它使用Cowboy(雖然是舊版本)作爲底層服務器,因爲它易於集成,所以它很不錯。 This escriptthis 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。