рдмрд╛рд╣рд░реА рд╢рдмреНрдж рдкреНрд░рд╛рд░реВрдк

рдпрджрд┐ рдХрд┐рд╕реА рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдбреЗрдЯрд╛ рдХреЛ рдПрд░рд▓реИрдВрдЧреНрд╕ рд╕рд░реНрд╡рд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдкрд╣рд▓реЗ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣реА рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдПрдХ рджреНрд╡рд┐рдЖрдзрд╛рд░реА рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдПрд░реНрдЧреНрд▓реЗрдВрдЧ рдЙрдиреНрд╣реЗрдВ рд╡рд╛рдкрд╕ рдЕрдирдкреИрдХ рдХрд░ рд╕рдХреЗрдВред рдпрд╣ рдЖрдорддреМрд░ рдкрд░ ASN.1, google protobuf, Thrift, рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпреЗ рд╕рднреА рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдВрджреЗрд╣ рдХреЗ рдпреЛрдЧреНрдп рдЙрддреНрдкрд╛рдж рд╣реИрдВред



рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдПрд░рд▓рдВрдЧ рдмрд╛рд╣рд░реА рд╢рдмреНрдж рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред Erlang рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдкреНрд░рдгрд╛рд▓реА рдХреЗ рджреЛ рдХрд╛рд░реНрдп рд╣реИрдВ - term_to_binary () рдФрд░ Binary_to_term () , рдЬреЛ рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рдорд╛рди рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдФрд░ рдХреБрд╢рд▓рддрд╛ рд╕реЗ рдкреИрдХ / рдЕрдирдкреИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рд╛рд░реВрдк рд╕реНрд╡рдпрдВ рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИ - www.erocang.org/doc/apps/erts/ erl_ext_dist.html



рдпрд╣ рд╕рдм рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?





Extред рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рдкреНрд░рд╛рд░реВрдк рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдЖрдорддреМрд░ рдкрд░ рдЗрд╕рдореЗрдВ рдбреЗрдЯрд╛ "рдЯреИрдЧ, рдбреЗрдЯрд╛" рдпрд╛ "рдЯреИрдЧ, рд▓рдВрдмрд╛рдИ, рдбреЗрдЯрд╛" рд╣реЛрддрд╛ рд╣реИред рдЯреИрдЧ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдбреЗрдЯрд╛ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред



рдмреБрдирд┐рдпрд╛рджреА рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП, рдЯреИрдЧ рд╣реИрдВ







рд╕рднреА рдкреИрдХреНрдб рдбреЗрдЯрд╛ рдХреЛ рдЯреИрдЧ 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}]}]}
      
      







рдирд┐рд╖реНрдХрд░реНрд╖




рд╣рдо рдЕрдЬрдЧрд░ рд╕реЗ рдПрд░реНрдЧреИрдВрдЧ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЯрд┐рд▓ рд╕рдВрд░рдЪрдирд╛ (рдереЛрдбрд╝рд╛ рд░рдХреНрдд рдХреЗ рд╕рд╛рде) рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдлрд╛рдпрджреЗ рд╣реИрдВ



рдПрдХреНрд╕рдЯ рдХрд╛ рдиреБрдХрд╕рд╛рдиред рд╢рдмреНрдж рдкреНрд░рд╛рд░реВрдк: рдХрд┐рд╕реА рднреА рд▓рдЪреАрд▓реЗрдкрди рдХрд╛ рдПрдХ рджреВрд╕рд░рд╛ рдкрдХреНрд╖ рд╣реЛрддрд╛ рд╣реИред рдХреБрдЯрд┐рд▓ рд╣рд╛рдереЛрдВ рдпрд╛ рдмреЗрд╡рдХреВрдл рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЖрдк рд╕рдВрд░рдЪрдирд╛рдПрдВ рдкреИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рдПрд░реНрд▓реИрдВрдЧ рд╕рд░реНрд╡рд░ рдХреЛ рдкрддрд╛ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдХрд┐ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИред



рд▓реЗрдЦ рдХреЗ рдмрд╛рд╣рд░, рджреЛрд╣рд░реЗ рдирдВрдмрд░реЛрдВ рдХреЗ рдкреНрд░рд╛рд░реВрдк, рдЖрдпрд╛рдо рд░рд╣рд┐рдд рдкреВрд░реНрдгрд╛рдВрдХ, рд╕рдВрдкреАрдбрд╝рд┐рдд рдбреЗрдЯрд╛ рдХрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг, рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреИрдХреЗрдЬрд┐рдВрдЧ рдмрд╛рдЗрдирд░реА рдЖрджрд┐ рд░рд╣реЗред рдЖрджрд┐ рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдм рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╡рд░реНрдгрд┐рдд рд╣реИред



рдореБрдЦреНрдп рдмрд╛рдд рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╕рдордЭрдирд╛ рд╣реИред



All Articles