前段时间我在Erlang和websocket上找到了Joe Armstrong的例子,但是我无法让它工作。
我在Erlang代码中修复了错误和一些警告,但是使用Apache我无法获得良好的结果。
任何人都可以通过一个非常简单的例子给我一些提示吗?我是否需要将带有JavaScript的网页放在Apache目录中,就像普通的PHP文件一样?
答案 0 :(得分:8)
Joe的websocket示例已过时,依赖于协议的过时版本。最新的浏览器使用更新版本(draft-00)
截至今天,misultin提供了一个很好的erlang实现。经过测试并与当前浏览器兼容:
https://github.com/ostinelli/misultin/blob/master/src/misultin_websocket.erl
答案 1 :(得分:8)
Yaws网络服务器提供了websocket实现。我还写了一个简化基于ws的应用程序编写的行为。它是我的Erlang工具的一部分(嗯,实际上是第一个):
答案 2 :(得分:3)
我发现SockJS-Erlang库非常好用。最重要的是,如果websockets不可用,它支持回退传输。它使用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。