<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Erlang非业余研究 &#187; ei</title>
	<atom:link href="http://blog.yufeng.info/archives/tag/ei/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.yufeng.info</link>
	<description>Erlang系统深度探索和应用</description>
	<lastBuildDate>Tue, 17 Jan 2012 06:05:54 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Erlang和port通讯的数据格式</title>
		<link>http://blog.yufeng.info/archives/97</link>
		<comments>http://blog.yufeng.info/archives/97#comments</comments>
		<pubDate>Thu, 22 Oct 2009 14:27:19 +0000</pubDate>
		<dc:creator>Yu Feng</dc:creator>
				<category><![CDATA[Erlang探索]]></category>
		<category><![CDATA[asn.1]]></category>
		<category><![CDATA[asn1c]]></category>
		<category><![CDATA[ei]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[packet]]></category>
		<category><![CDATA[term_to_binary]]></category>

		<guid isPermaLink="false">http://blog.yufeng.info/archives/97</guid>
		<description><![CDATA[原创文章，转载请注明： 转载自Erlang非业余研究 本文链接地址: Erlang和port通讯的数据格式 erlang内置的port非常强大，是erlang通往外面世界的通道，所以port和erlang程序的通讯的数据格式影响了通讯的效率，和稳定性。我们在选择格式的时候， 会优先考虑到erlang的特性和port程序编写语言的特点，选出一种2者都容易处理的格式。 通讯通常有2种，基于行的文本和2进制格式。 行通讯最容易，因为是文本，调试起来就很方便。 形如这样的格式： request args\n erlang编码这种格式就是加个\n, 解码可以用driver的{line, xxx}选项。而外部程序比如说c 解码可以用fgets, 编码也是加个\n. 缺点是： 表达上比较受限 不好表示结构数据。 2进制格式，形如这样的格式： 4个字节包长度 包体 . erlang和解码都可以利用driver的{packet,4} 自动把包体接处理。而外部程序比如说c 处理这样的也非常轻松。 包体有以下几种留下的格式： 1. 自定义格式。 比如： 4个字节cmd + 2个字节字符长度 + 字符 只要erlang和外部程序都能同样这种格式就好。erlang有很强大的binary处理这种事情很轻松， c同样也是。 缺点是太繁琐，格式变化的时候 容易漏掉东西。 2. erlang的外部协议格式。 erlang编码可以用term_to_binary, 解码用binray_to_term. c程序用ei库俩编解码。 这样erlang端的工作量就很小， c端的麻烦些。 3. json这样的格式。 erlang和c都用现成的json库来编码解码。 4. asn.1格式。erlang有强大的内置的asn编码解码。c端也有asn1c这样的编解码器。 写个asn1规格 2边各自生成代码，这样最轻松 而且能表达数据很轻松，推荐使用。 Post [...]]]></description>
			<content:encoded><![CDATA[<div style="margin-top: 15px; font-style: italic">
<p><strong>原创文章，转载请注明：</strong> 转载自<a href="http://blog.yufeng.info/">Erlang非业余研究</a></p>
<p><strong>本文链接地址:</strong> <a href="http://blog.yufeng.info/archives/97">Erlang和port通讯的数据格式</a></p>
</div>
<p>erlang内置的port非常强大，是erlang通往外面世界的通道，所以port和erlang程序的通讯的数据格式影响了通讯的效率，和稳定性。我们在选择格式的时候， 会优先考虑到erlang的特性和port程序编写语言的特点，选出一种2者都容易处理的格式。</p>
<p>通讯通常有2种，基于行的文本和2进制格式。</p>
<p>行通讯最容易，因为是文本，调试起来就很方便。 形如这样的格式：<br />
request args\n  erlang编码这种格式就是加个\n, 解码可以用driver的{line, xxx}选项。而外部程序比如说c 解码可以用fgets, 编码也是加个\n. 缺点是： 表达上比较受限 不好表示结构数据。</p>
<p>2进制格式，形如这样的格式：<br />
4个字节包长度 包体 . erlang和解码都可以利用driver的{packet,4} 自动把包体接处理。而外部程序比如说c 处理这样的也非常轻松。</p>
<p>包体有以下几种留下的格式：<br />
1. 自定义格式。 比如： 4个字节cmd + 2个字节字符长度 + 字符<br />
只要erlang和外部程序都能同样这种格式就好。erlang有很强大的binary处理这种事情很轻松， c同样也是。 缺点是太繁琐，格式变化的时候 容易漏掉东西。</p>
<p>2. erlang的外部协议格式。 erlang编码可以用term_to_binary, 解码用binray_to_term. c程序用ei库俩编解码。 这样erlang端的工作量就很小， c端的麻烦些。</p>
<p>3. json这样的格式。 erlang和c都用现成的json库来编码解码。</p>
<p>4. asn.1格式。erlang有强大的内置的asn编码解码。c端也有asn1c这样的编解码器。 写个asn1规格 2边各自生成代码，这样最轻松 而且能表达数据很轻松，推荐使用。</p>
<div style="margin-top: 0; margin-bottom: 15px; color: #888888; font-size: 80%; font-style: italic">
<p>Post Footer automatically generated by <a href="http://easwy.com/blog/wordpress/wp-posturl/" style="color: #8888FF; text-decoration: underline;">wp-posturl plugin</a> for wordpress.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.yufeng.info/archives/97/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>

