Erlang Gen_TCP 实现 WebSocket 支持:简单示例
以下是一个简单的 Erlang Gen_TCP 实现 WebSocket 支持的示例:
-module(websocket_server).
-export([start/1, stop/0]).
start(Port) ->
{ok, Listen} = gen_tcp:listen(Port, [{active, false}, {reuseaddr, true}]),
spawn(fun() -> accept(Listen) end).
accept(Listen) ->
{ok, Socket} = gen_tcp:accept(Listen),
spawn(fun() -> accept(Listen) end),
loop(Socket).
loop(Socket) ->
case gen_tcp:recv(Socket, 0) of
{ok, Data} ->
case handle_message(Socket, Data) of
{ok, Response} ->
gen_tcp:send(Socket, Response),
loop(Socket);
{close} ->
gen_tcp:close(Socket)
end;
{error, _Reason} ->
gen_tcp:close(Socket)
end.
handle_message(Socket, Data) ->
case websocket:parse_request(Data) of
{ok, Request} ->
case Request#websocket.opcode of
websocket:opcode_close ->
{close};
websocket:opcode_ping ->
{ok, websocket:build_pong()};
websocket:opcode_pong ->
ok;
_ ->
{ok, websocket:build_response(Request)}
end;
{error, _Reason} ->
gen_tcp:close(Socket),
{close}
end.
stop() ->
ok.
注意:这只是一个简单的示例,实际上 WebSocket 协议实现比这要复杂得多。如果你需要在生产环境中使用 WebSocket,你应该使用现成的库,例如 Cowboy。
原文地址: https://www.cveoy.top/t/topic/mMAE 著作权归作者所有。请勿转载和采集!