2010-11-22 60 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。