2014年5月

php函数crc32存在的问题

中午突然获知AS客户端与服务端c协议通讯时,为了验证完整性和防外挂,服务端要求协议带上crc的验证信息,我做的php后台有Socket形式的GM命令也要求相同的协议。

但php和服务端计算出来的验证值是不同的,然后我试了下python写crc,python和服务端计算后的验证值是相同的。

经过一番搜索,通过文章1文章2得知,在python2.x中 binascii.crc32(v) 求出了v的crc32值,是一个long型,经过 binascii.crc32(v) & 0xffffffff 计算后的验证值跟php一样的,可以说:

php的crc32 = python的 binascii.crc32(v) & 0xffffffff

此文验证结果没错,但原理性内容存在问题,待我学习crc算法,慎读。

- 阅读剩余部分 -

游戏通讯协议

你们用哪一种协议?
1、包长度->版本号->协议号->内容

2、包头标志(比如“|”)->版本号->协议号->内容长度->内容

还有消息包格式的定义,这个曾在云风的blog上展开过激烈的争论。消息包格式定义包括三段,包长、消息码和包体,争论的焦点在于应该是消息码在前还是包长在前,我们也把这个当作是信仰问题吧,有兴趣的去云风的blog上看看,论论。

另外早期有些游戏的包格式定义是以特殊字符作分隔的,这样一个好处是其中某个包出现错误后我们的游戏还能继续。但实际上,我觉得这是完全没有必要的,真要出现这样的错误,直接断开这个客户端的连接可能更安全。而且,以特殊字符做分隔的消息包定义还加大了一点点网络数据量。
引用百万用户级游戏服务器架构设计

lua调用so动态库

今天,我给我的测试软件框架添加了一个 C 模块,里面封装了一个 sleep 的系统调用。我的目的是在用 Lua 时,要延时的话,不用执行 os.execute("sleep 5") 之类的蹩脚语句,而替之以 mt.sleep(5) 之类的就行了。

- 阅读剩余部分 -

skynet目录和文件分析

  • 根目录
    README.md 简单介绍了怎么编译和测试Skynet
    LICENSE 许可证信息,采用MIT,很宽松的协议。
    Makefile 编译规则文件,用于编译Skynet
    platform.mk 编译与平台相关的设置
    3rd 第三方的代码,有lua和jemalloc等
    examples 附带的例子
    lualib 使用lua写的库
    lualib-src 使用C写并封装给lua使用的库
    service 使用lua写的Skynet的服务模块
    service-src 使用C写的Skynet的服务模块
    skynet-src Skynet的核心代码
    test 使用lua写的一些测试代码

skynet简介

skynet是云风编写的服务端底层管理框架,底层由C编写,配套lua作为脚本使用,可换python等其他脚本语言。
skynet默认开启_timer线程、socket线程、_monitor线程以及可配置个数的多个_worker线程,启动skynet服务就是向skynet注册由c编写的so模块实例也就是服务。
skynet主要工作是通过模块注册管理服务,并协调服务之间的调用和通讯。

skynet自带的模块中有一个重要的模块是snlua.so模块,通过snlua.so和指定lua脚本文件可以启动多个lua编写的服务,不用每个服务都是用c来编写,而且大部分逻辑都是在 lua 脚本下开发,只有需要考虑性能的模块才用 C 语言开发成库,直接提供给 lua 调用。 现在 Skynet提供给 lua 使用的库还不多,期望以后这些库多了,可以方便、简单的完成一个网络游戏服务端的开发。

Skynet是服务端的最底层框架,和游戏有关的各种服务都是基于架构之上开发的。服务启动后skynet一般由socket接受外部msg传入内部服务做处理。

PPT简介:http://pan.baidu.com/s/1i3qp7b3

深入理解PHP ob_flush和flush的区别

buffer是一个内存地址空间,Linux系统默认大小一般为4096(1kb),即一个内存页。主要用于存储速度不同步的设备或者优先级不同的 设备之间传办理数据的区域。通过buffer,可以使进程这间的相互等待变少。

这里说一个通俗一点的例子,你打开文本编辑器编辑一个文件的时候,你每输入 一个字符,操作系统并不会立即把这个字符直接写入到磁盘,而是先写入到buffer,当写满了一个buffer的时候,才会把buffer中的数据写入磁 盘,当然当调用内核函数flush()的时候,强制要求把buffer中的脏数据写回磁盘。

- 阅读剩余部分 -