全部博文(921)
发布时间:2013-01-01 16:18:03
文章来自:http://1234n.com/?post/fpkzlc 今天和阿灿为项目做一个多人在线行走的Demo,在Flash端遇到数据“粘包”的问题,下面记录一下原理和处理办法。 什么是“粘包”呢?粘包是指数据发送端希望接受端收到的数据包因为网络的“流”特性,使得连续的数据包的字节连贯在一起,导致接收端无法以数据包为单位处理数据的情况。 打个比方吧,A和B两个人通过一根水管互相传递水,他们通过每次接到的水的重量来判断对方表达的意思。如果A连续乘了不同重量的几杯水倒入水管中传递给B,B那一头打开水龙头接到的只能是连贯的水流,而不是一杯杯的水,数据在网络上传递也是同样......【阅读全文】
发布时间:2013-01-01 16:11:18
晚上做了下实验,Erlang端用{packet,2}格式,Flash端使用writeUTF和readUTF函数,正好格式一致,不需要自己解析两个字节长度信息。 Erlang端的代码: -module(server). -export([start/1, server_proc/1]). start (Port) -> {ok, Sock} = gen_tcp:listen(Port, [binary, {packet, 2}, {active, false}]), &nbs......【阅读全文】
发布时间:2013-01-01 16:00:53
文章来自http://1234n.com/?post/hvtqnu 前一次实验,我使用的是本地swf文件,所以没有遇到安全沙箱问题,但在实际环境中我们的Flash文件是通过URL引用的,这时候Flash的Socket通讯会受到安全沙箱机制的限制。具体原理是:Flash在尝试向服务器A发起Socket连接前,会先尝试连接服务器A的843端口,求情一个xml格式的安全策略文件,该文件告诉Flash是否有权限向服务器A发起Socket连接。所以,我们需要在Erlang端增设一个守候在843端口的安全策略文件服务器。 此次实验的Erlang代码: -module(se......【阅读全文】
发布时间:2013-01-01 15:33:40
erlang服务端,主要实现与flash客户端的连接、消息传递服务自带843端口服务解决flash9以上暴汗的安全沙箱问题chat.erl -module(chat). -export([start/0,manage_clients/1,stop/0,find/1]). -record(player, {id,socket,time=none}). start() -> chat_server:start(?MODULE,manage_clients). stop......【阅读全文】
发布时间:2013-01-01 15:22:59
erlang服务端,主要实现与flash客户端的连接、消息传递服务自带843端口服务解决flash9以上暴汗的安全沙箱问题 chat.erl -module(chat). -export([start/0,manage_clients/1,stop/0,find/1]). -record(player, {id,socket,time=none}). start() -> chat_server:start(?MODULE,manage_clients). ......【阅读全文】