Я хочу потоковать данные с помощью yaws
в мое приложение кометы, я читал и работал над тем, чтобы понять это, но пример из yaws кажется мне немного сложным (я новичок в Erlang ). Я просто не могу прийти в себя...
вот пример из рыскания (я немного изменил):
out(A) ->
%% Create a random number
{_A1, A2, A3} = now(),
random:seed(erlang:phash(node(), 1),
erlang:phash(A2, A3),
A3),
Sz = random:uniform(1),
Pid = spawn(fun() ->
%% Read random junk
S="Hello World",
P = open_port({spawn, S}, [binary,stream, eof]),
rec_loop(A#arg.clisock, P)
end),
[{header, {content_length, Sz}},
{streamcontent_from_pid, "text/html; charset=utf-8", Pid}].
rec_loop(Sock, P) ->
receive
{discard, YawsPid} ->
yaws_api:stream_process_end(Sock, YawsPid);
{ok, YawsPid} ->
rec_loop(Sock, YawsPid, P)
end,
port_close(P),
exit(normal).
rec_loop(Sock, YawsPid, P) ->
receive
{P, {data, BinData}} ->
yaws_api:stream_process_deliver(Sock, BinData),
rec_loop(Sock, YawsPid, P);
{P, eof} ->
yaws_api:stream_process_end(Sock, YawsPid)
end.
Что мне нужно, так это преобразовать приведенный выше сценарий в такой, который можно комбинировать со следующим.
mysql:start_link(p1, "127.0.0.1", "root", "azzkikr", "mydb"),
{data, Results} = mysql:fetch(p1, "SELECT*FROM messages WHERE id > " ++ LASTID),
{mysql_result, FieldNames, FieldValues, NoneA, NoneB} = Results,
parse_data(FieldValues, [], [], [], [], [])
Где parse_data(FieldValues, [], [], [], [], [])
возвращает строку записи в формате JSON. Комбинированный этот скрипт должен постоянно проверять наличие новой записи в базе данных, и если есть, он должен извлекаться, как и комета.
Спасибо, пусть все попадут в рай!