рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдПрд░рд▓рдВрдЧ рдмрд╛рд╣рд░реА рд╢рдмреНрдж рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред Erlang рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкреНрд░рдгрд╛рд▓реА рдХреЗ рджреЛ рдХрд╛рд░реНрдп рд╣реИрдВ - term_to_binary () рдФрд░ Binary_to_term () , рдЬреЛ рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рдорд╛рди рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдФрд░ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдкреИрдХ / рдЕрдирдкреИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рд╛рд░реВрдк рд╕реНрд╡рдпрдВ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ - www.erocang.org/doc/apps/erts/ erl_ext_dist.html
рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
Extред рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкреНрд░рд╛рд░реВрдк рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛ "рдЯреИрдЧ, рдбреЗрдЯрд╛" рдпрд╛ "рдЯреИрдЧ, рд▓рдВрдмрд╛рдИ, рдбреЗрдЯрд╛" рд╣реЛрддрд╛ рд╣реИред рдЯреИрдЧ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдмреБрдирд┐рдпрд╛рджреА рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдЯреИрдЧ рд╣реИрдВ
- рдЯрдкрд▓ - 104, рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (1 рдмрд╛рдЗрдЯ), рд╕рднреА рддрддреНрд╡
- рд╕реВрдЪреА - 108, рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ (4 рдмрд╛рдЗрдЯреНрд╕), рд╕рднреА рддрддреНрд╡, 106
- рдкрд░рдорд╛рдгреБ - 115, рд▓рдВрдмрд╛рдИ (1 рдмрд╛рдЗрдЯ), рдкрд░рдорд╛рдгреБ рдкрд╛рда
- рдкреВрд░реНрдгрд╛рдВрдХ - 98, рдорд╛рди (4 рдмрд╛рдЗрдЯреНрд╕), рдпрд╛ рдЫреЛрдЯреЗ рдкреВрд░реНрдгрд╛рдВрдХ (255 рд╕реЗ рдХрдо) рдХреЗ рд▓рд┐рдП - 97, рдорд╛рди (1 рдмрд╛рдЗрдЯ)
- рд╕реНрдЯреНрд░рд┐рдВрдЧ - 107, рд▓рдВрдмрд╛рдИ (2 рдмрд╛рдЗрдЯреНрд╕), рдкрд╛рдаред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рдХреА рд╕реВрдЪреА рдХреЗ рд░реВрдк рдореЗрдВ рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдкрдХреЛ 8-рдмрд┐рдЯ рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╢реЙрд░реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЯреИрдЧ рд╡рд╣ рд╣реИ рдЬреЛ рдбреЙрдХреНрдЯрд░ рдиреЗ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдерд╛
рд╕рднреА рдкреИрдХреНрдб рдбреЗрдЯрд╛ рдХреЛ рдЯреИрдЧ 131 рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рд╡рд░реНрддрдорд╛рди рдПрдХреНрд╕рдЯреНрд░реАрдо рдХрд╛ рд╡рд░реНрдЬрди рдирдВрдмрд░ рд╣реИред рд╢рдмреНрдж рдХрд╛ рдкреНрд░рд╛рд░реВрдкред
рдпрд╣реА рд╣реИ, рдПрд░реНрд▓рд╛рдВрдЧ рдореВрд▓реНрдп [{рдмреИрдВрдХрдиреЛрдЯ, 100, рд░рдЧрдбрд╝}] рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдкреНрд░рдорд╛рдг рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рд▓рд┐рдЦреЗрдВрдЧреЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрдЬрдЧрд░ рдПрдХ рд╕рд░рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рдЬреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрдЬрдЧрд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдкреИрдХ рдХрд░реЗрдЧрд╛, рдФрд░ erlang рдкрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЕрдирдкреИрдХ рдХрд░реЗрдЧрд╛ ...
рд╣рдо рдПрд░рд▓рдВрдЧ рд╕реВрдЪреА рдореЗрдВ рдкрд╛рдпрдерди рд╕реВрдЪреА рдХреЛ рдкреИрдХ рдХрд░реЗрдВрдЧреЗ, рдПрд░рд▓рдВрдЧ рдЯреБрдкрд▓, рдкреВрд░реНрдгрд╛рдВрдХ, рдкрд╛рдпрдерди рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдкрд╛рдпрдерди рдЯреНрдпреВрдкрд▓ред рдкрд░рдорд╛рдгреБрдУрдВ рдХреЗ рд▓рд┐рдП ... рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ ... рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдЬрдЧрд░ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдПрдХ рд╡рд╛рд░рд┐рд╕ рдмрдирд╛рдПрдВ рддрд╛рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╕рд╛рдзрд╛рд░рдг рддрд╛рд░реЛрдВ рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдкрд╣рдЪрд╛рдирд╛ рдЬрд╛ рд╕рдХреЗред
рдпрд╣ рдХреБрдЫ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
from types import IntType, StringType, TupleType, ListType from struct import pack import socket class atom(str): pass def _eterm(x,accum): if type(x) is IntType: accum.append(pack('>Bi',98,x)) return if type(x) is StringType: accum.append(pack(">BH",107,len(x))) accum.append(x) return if type(x) is TupleType: accum.append(pack("BB",104,len(x))) for term in x: _eterm(term,accum) return if type(x) is ListType: accum.append(pack(">BI",108,len(x))) for term in x:_eterm(term,accum) accum.append(chr(106)) return if isinstance(x,atom): accum.append(pack("BB",115,len(x))) accum.append(x) return raise AssertionError("Cannot convert that type to erlang term %s"%(x)) def binary(X): accum = [chr(131)] _eterm(X,accum) return "".join(accum)
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛ред рдЕрдм рд╣рдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рдкреИрдХ рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ рд╕рд░рд▓рддрдо рддрд░реАрдХреЗ рд╕реЗ рдПрд░рд▓реИрдВрдЧ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗред
pterm = (atom("vcard"),[(atom("firstname"),"Odobenus"), (atom("lastname"),"Rosmarus"), (atom("age"),48), (atom("children"),[ ("Dimon",1988), ("Natashka",1990), ("Katka",2000), ("Anka",2003)] ) erlterm = binary(pterm) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.sendto(erlterm,("localhost",10000))
рдпрд╣реА рд╣реИ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдПрдХ udp рдкреИрдХреЗрдЬ рдкреИрдХ рдХрд┐рдпрд╛ рдФрд░ рднреЗрдЬрд╛ред рдПрд░реНрд▓реИрдВрдЧ рдореЗрдВ рд╣рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ:
1> gen_udp:open(10000,[binary]). {ok,#Port<0.585>} 2> R=receive {udp,_ ,_,_,Bin} -> Bin end. <<131,104,2,115,5,118,99,97,114,100,108,0,0,0,4,104,2,115, 9,102,105,114,115,116,110,97,109,101,107,...>> 3> binary_to_term( R ). {vcard,[{firstname,"Odobenus"}, {lastname,"Rosmarus"}, {age,48}, {children,[{"Dimon",1988}, {"Natashka",1990}, {"Katka",2000}, {"Anka",2003}]}]}
рдирд┐рд╖реНрдХрд░реНрд╖
рд╣рдо рдЕрдЬрдЧрд░ рд╕реЗ рдПрд░реНрдЧреИрдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ (рдереЛрдбрд╝рд╛ рд░рдХреНрдд рдХреЗ рд╕рд╛рде) рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдлрд╛рдпрджреЗ рд╣реИрдВ
- рд▓рдЪреАрд▓рд╛рдкрдиред рдЖрдк рдХреБрдЫ рднреА рдкреИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
- рдкреНрд░рджрд░реНрд╢рдиред Erlang рдкрд░, Binary_to_term () рдФрд░ term_to_binary () BIF рдХреЗ рд░реВрдк рдореЗрдВ C рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ , рдФрд░ рдЧрддрд┐ рдФрд░ рд╕реНрдореГрддрд┐ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ ...
рдПрдХреНрд╕рдЯ рдХрд╛ рдиреБрдХрд╕рд╛рдиред рд╢рдмреНрдж рдкреНрд░рд╛рд░реВрдк: рдХрд┐рд╕реА рднреА рд▓рдЪреАрд▓реЗрдкрди рдХрд╛ рдПрдХ рджреВрд╕рд░рд╛ рдкрдХреНрд╖ рд╣реЛрддрд╛ рд╣реИред рдХреБрдЯрд┐рд▓ рд╣рд╛рдереЛрдВ рдпрд╛ рдмреЗрд╡рдХреВрдл рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рд╕рдВрд░рдЪрдирд╛рдПрдВ рдкреИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдПрд░реНрд▓реИрдВрдЧ рд╕рд░реНрд╡рд░ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред
рд▓реЗрдЦ рдХреЗ рдмрд╛рд╣рд░, рджреЛрд╣рд░реЗ рдирдВрдмрд░реЛрдВ рдХреЗ рдкреНрд░рд╛рд░реВрдк, рдЖрдпрд╛рдо рд░рд╣рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ, рд╕рдВрдкреАрдбрд╝рд┐рдд рдбреЗрдЯрд╛ рдХрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг, рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдмрд╛рдЗрдирд░реА рдЖрджрд┐ рд░рд╣реЗред рдЖрджрд┐ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред
рдореБрдЦреНрдп рдмрд╛рдд рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╕рдордЭрдирд╛ рд╣реИред