Ruby 一套 Ruby 网游服务器框架

frodosens · 2014年08月06日 · 最后由 frodosens 回复于 2014年08月18日 · 9407 次阅读
本帖已被管理员设置为精华贴

使用 libeven 和 ruby 编写的一套支持分布式部署的 ruby 网游服务器框架. 目前功能较为简单, 支持节点转发, 虚拟节点, 计时器等功能,
这套东西.只有最基础的网络 +ruby 包处理.回包等功能.也支持 Http 协议. 我手上的游戏正在使用 . 在一台一般的 PC 机上,吞吐量约 5w/s 目前 ruby 版本用是的 2.1.1. 较稳定.没出现内存泄漏等问题.

也可以直接编译成 ruby 扩展库使用 进入 fsnet ruby extconf.rb make & make install 然后 require 'fsnet' 就 OK 了:)

也可以直接作为嵌入式语言使用

有兴趣的朋友可以看看 :) https://github.com/frodosens/fsnet

class RunServer < GameServer
    attr_reader :pvp_server;
    def on_start_complete()

        super();
        @pvp_server   = connect_node("pvp_server");

    end

       def handle_pack(sender, pack)
           msg = pack.input.read_string()
           os = FSOutputStream.new
           os.write_string("Hello")
           sender.send_pack(Pack.create( pack.serial, PACKAGE_TYPE, os);
      end
end
server = RunServer.new
server.pvp_server.send_pack(pack, user_data, proc{ |result, user_data|
       # 节点回应
 }

一个简单的节点服务差不多是这样

补充:

然后具体包协议.. 用的是二进制流协议, 包头如下 byte byte_order int32 full_len 后面的就是 Pack 内容 这个可以在 pack.rb 里根据自己游戏具体定义.

收藏了,不错

-0- 感谢楼上....

然后具体包协议.. 用的是二进制流协议, 包头如下 byte byte_order int32 full_len 后面的就是 Pack 内容 这个可以在 pack.rb 里根据自己游戏具体定义.

可以看一下游戏的演示么

0.0 我明天再上传一个客户端 Demo 好了....

更新一个 JAVA 的客户端 :) 功能是发送 3 个 byte 到服务端, 服务端返回相同的 3 个 byte 执行到 RunServer#cmd_version

nice, 很早之前就想做这么个服务器了

帖一下游戏案例呀!

=0= 周末有事..没看到..

to huacnlee 不好意思, 游戏暂时还没有上线:)

呃..发现 git 上的那个.配置有些问题..无法直接 run 起来..

重新提交了一下..

部署方法大概如下

  1. 编译 libevent 和 ruby 进入 libs 把 libevent 和 ruby 都编译安装.

  2. 编译 fsnet 进入 fsnet 执行 ruby extconf.rb 这样你目录下会生成 Makefile 文件 然后 make & make install

  3. 启动 进入 scripts ruby main.rb

然后应该会出现

login_server[ 0.0.0.0, 50561 ]启动完成 run_server[ 0.0.0.0, 50562 ]启动完成 run_server Connecting to DBServer run_server Connecting to DBServer successful gate_server[ 0.0.0.0, 50560 ]启动完成 gate_server Connecting to LoginServer gate_server Connecting to LoginServer successful gate_server Connecting to RunServer gate_server Connecting to RunServer successful db_server[ 0.0.0.0, 50563 ]启动完成 execute on_as_child_node execute on_as_child_node execute on_as_child_node

这样就代表服务已经启动完毕了

对了.这个 demo 带 http 范例 浏览器进入 127.0.0.1:3000 -0- 如果看到 Hello FSNET 就代表 http 也成功启动了

这是缓存问题吧? Ruby · frodosens · 于 5 天前发布 · 最后由 huacnlee 于 3 天前回复 · 1828 次阅读

后面都有人回复了...

一直不理解为什么很多人说 Ruby 是性能瓶颈,反正我是没感觉它是瓶颈,大概他们把 ruby 和 ruby on rails 弄混了,就跟很多新手分不清 java 和 spring 的区别一样

#11 楼 @Iacob ruby 其实是一个小姑凉. 不可能让他干重活. 但是他可以很轻巧的做一些大汉子也干不来的活 适当的分配.可以让生活更美好.:)

#11 楼 @Iacob 事實上這裏強大的是 C 吧

@frodosens ,最近有个做银联支付功能联系我,跟你头像一样.

#16 楼 @oldfritter XD 娘口 33 很受欢迎啊.

ruby 的扩展库太丰富了..导致我根本就不需要去写 = =. 导致都不知道该加点什么东西到项目里来.

后面看看能不能集成一些通用解决方案 (比如 登陆, 跨服什么的 希望在国内 ruby 不是只能做 web,能有更多的扩展可能. 大家有什么好的想法.都可以提出来.:)

18 楼 已删除
需要 登录 后方可回复, 如果你还没有账号请 注册新账号