30 views
Skip to first unread message

卓一抗

unread,
Aug 6, 2013, 8:31:44 AM8/6/13
to erlang...@googlegroups.com
hello, all,好久不见。

我最近在做的一个erlang游戏服务器框架:
它比较简单,主要实现了协议处理,数据存储(MySQl),Gd配置文件处理(Csv)三个部分。有以下功能和优点:

a.使用我自己设计的二进制协议结构,有效载荷非常高,最大化将传输的每一个字节都是有效数据,完全无json的key之类的描述信息,对于3G网络的手游十分省流量。
b.有一大堆xls的配置文件吗,可以使用data/data.py将其导出为csv文件,并使用slg-csv将其直接映射为ets表,只要1行代码就搞定。
c.需要在数据库MySQl和内存间同步数据吗?slg-model使用ets做数据cache,并即时同步到mysql,你不需要管怎么同步,只要正确的设计数据结构即可。
d.另外增加了一些常用的erlang库,比如:smerl, reloader等等。

简单的游戏服务器,可以直接拿去写逻辑。

感兴趣吗? watch me=>




周梦想

unread,
Aug 7, 2013, 6:01:08 AM8/7/13
to erlang...@googlegroups.com
不错,可以用protobuf来做二进制协议,这样可以和各种客户端接。


--
您收到此邮件是因为您订阅了 Google 网上论坛的“Erlang China”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 erlang-china...@googlegroups.com
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
 
 

Tap4fun

unread,
Aug 7, 2013, 6:51:31 AM8/7/13
to erlang...@googlegroups.com
协议处理我考虑过用pb,因为它对erlang不是官方支持就放弃了,自己设计的协议简单好掌控,而且对数据结构的描述能力也不差。

发自我的 iPad

陈堃

unread,
Aug 9, 2013, 10:00:03 AM8/9/13
to erlang...@googlegroups.com
非常不错!introduction也写得非常详细
--
今天你笑了吗?

卓一抗

unread,
Aug 9, 2013, 10:02:59 AM8/9/13
to erlang...@googlegroups.com

谢谢,还有很多不完善的地方,非常欢迎提供宝贵意见。

黑月恋芊

unread,
Aug 10, 2013, 11:01:26 AM8/10/13
to erlang...@googlegroups.com
  呵呵 抗哥 没想到在这看到你 二进制的确实省流量和数据等 我们之前也在用这种TLV方式的 但是这种如果出现错位一般很容易出问题 以及增加时基本只能在原结构下面加 呵呵


在 2013年8月9日下午2:02,卓一抗 <zhuoy...@gmail.com>写道:

谢谢,还有很多不完善的地方,非常欢迎提供宝贵意见。

zhuo yikang

unread,
Aug 10, 2013, 11:16:06 AM8/10/13
to erlang...@googlegroups.com
哈哈,是的,如果错位就麻烦了,所以编写的时候我也很小心,保证没有bug;如果要兼容各种客户端,就不能修改原协议包结构,只能通过增加完成,相比没有自描述的协议灵活,看各人取舍。


2013/8/10 黑月恋芊 <nineey...@gmail.com>

zhuo yikang

unread,
Aug 10, 2013, 11:16:17 AM8/10/13
to erlang...@googlegroups.com
哈哈,是的,如果错位就麻烦了,所以编写的时候我也很小心,保证没有bug;如果要兼容各种客户端,就不能修改原协议包结构,只能通过增加完成,相比没有自描述的协议灵活,看各人取舍。


2013/8/10 黑月恋芊 <nineey...@gmail.com>
  呵呵 抗哥 没想到在这看到你 二进制的确实省流量和数据等 我们之前也在用这种TLV方式的 但是这种如果出现错位一般很容易出问题 以及增加时基本只能在原结构下面加 呵呵

Bob

unread,
Aug 10, 2013, 9:38:14 PM8/10/13
to erlang...@googlegroups.com
不错,可以作为项目研究研究。赞一个



Cheers,
---
Bob





zhuo yikang

unread,
Aug 11, 2013, 3:40:07 AM8/11/13
to erlang...@googlegroups.com

求粉求关注。

Lihe Wang

unread,
Aug 11, 2013, 6:03:07 AM8/11/13
to erlang...@googlegroups.com
关于协议出错的问题,我思考了很久。有没有人有一种数学上可以保证不会出错的数据传递方式呢?同时还要比较好的防范恶意或无意的错误,比如tlv,传一个很大的l,但是没有后续数据,或是意外断掉,有比较好的方式防止出现问题。

先说一下我已经总结的资料:
1、定长发送并加入校验值,比如crc32。但是校验值本身传递也会有可能出错,计算稳定性的方面我至今也没算明白(会的给讲一下,先谢过)。能自修正,但是只能修正一位错误。udp加上以太网帧基本就是这个了。
2、tlv,需要开发双方协调数据描述的schemer,有时候麻烦,升级时很恶心。好处是速度比较快,没有多余数据,但是只能加入时间参量防止意外。同时如果数据传输中损失一位就虾米了,也发现不了,丢失一位更扯,后面全错。
3、跟tlv差不多的是utf8一类的模式,自带启起始头信息(附加长度信息),以不可分割字节为描述基础。由于常数据与头数据的最高位不同(实际上是类型位),数据损坏只损失一个意义单元。但是不能修正错误,浪费相当多的数据空间给类型。所以传个以英文为基础的文本还不错,描述更高级的数据,就要以语法,比如xml配合了。有意思的是生物的DNA使用的似乎是这种方法,按上帝的说法可能是最优思路了,大不了具体结构换一下,但是DNA也不防病毒,也会复制出错产生突变,每次想到这些我都有点绝望。

以上三种我个人全都不太满意,有没有谁知道更好的方法?

zhuo yikang

unread,
Aug 11, 2013, 7:16:51 AM8/11/13
to erlang...@googlegroups.com

其实有,在通信方面经常使用的差错控制编码,有完善的数学理论,也是一些学院的研究课程,常用的海明码可以修正一位的传输错误,有更加复杂的rs麻bch码可以修正更多的错误,可以看林舒的那本书,非常有名。另外,对于我来说这已经是另一个研究领域,而非协议设计的范畴,在工程中使用tcp连接,没有丢位和错位的可能,因为即使有,也在链路层和网络层被处理了,不需要关心这些,我做游戏时间不长,如果真的遇到,短线重连吧,对erlang很好处理,如果频繁遇到,应该是程序写错了。

Reply all
Reply to author
Forward
0 new messages