源地址:http://www.9miao.com/question-15-54560.html

最近好多童鞋都在问firefly几个服务器之间是如何通信的,其实在之前的distributed使用文档中有过了相关的介绍(本文可结合那篇文档一起查看,更容易理解)。一个最简单的游戏服务器,肯定包括net(负责同客户端连接,将客户端消息传给gate处理)、gate(负责将客户端的请求分配到对应的逻辑服务器中)和scene(场景服务器,游戏中主要的逻辑计算都在此服务器中)。我们将net和scene称为node服务器,gate称为root服务器,下面就node与root之间的交互进行一个简单的演示(本文中的代码都可在附件中下载到)。

1.创建工程
命令行下输入firefly-admin.py createproject test_distributed(linux在终端输入),
<ignore_js_op>

firefly会在该目录中创建一个名为test_distributed的工程
<ignore_js_op>

2.导入工程
将工程导入到eclipse中
<ignore_js_op>

3.配置参数
配置config.json中的相应参数
<ignore_js_op>

具体参数含义和配置说明详见:http://bbs.9miao.com/forum.php?m ... 6orderby%3Ddateline

4.编写代码
在上面填写的server配置的app对应路径下分别建立root.py和node.py。
root.py:
<ignore_js_op>

第8行,使用rootserviceHandle方法修饰自定义的供node调用的方法returnData_1001。rootserviceHandle方法为firefly内部定义好的方法(建议去看看firefly源码),可直接调用,具体作用为修饰root服务器中可供node服务器调用的方法,没有被rootserviceHandle修饰的方法,node服务器不可调用
第13行,调用node服务器的printData_1002方法,参数为data
第24行,result为调用node服务器的subNu_1004方法(参数为a,b)发回的延迟对象
第26行,当延迟对象的结果返回后,将返回的结果作为参数传递到printResult方法中
第29行,10秒后执行test方法,参数为100和50
<ignore_js_op>

第8行,使用remoteserviceHandle方法修饰自定义的供root调用的方法returnData_1001。rootserviceHandle方法也是firefly内部定义好的方法,具体作用为修饰node服务器中可供root服务器调用的方法,没有被remoteserviceHandle修饰的方法,root服务器不可调用
第18行,5秒后调用root服务器的returnData_1001方法,参数为后面的字符串
※运行这个工程后,第5秒,node会去调用root服务器中的returnData_1001这个方法,returnData_1001会打印出node传来的字符串并将此字符串作为参数传递给node服务器中的printData_1002方法,printData_1002将此字符串打印出来,这就完成了一个完整的交互。第10秒,root会调用node服务器的subNu_1004方法(参数为100,50),并打印出得出的结果。

5.运行startmaster.py
<ignore_js_op>

红线部分为node调用root的方法returnData_1001的结果,蓝线部分为root调用node的方法printData_1002的结果,粉色部分为root调用node的方法subNu_1004的结果。

 

firefly服务器间通信演示的更多相关文章

  1. Java中通过方法创建一个http连接并请求(服务器间进行通信)

    服务器间进行通信只能通过流(Stream)的方式进行,不能用方法的返回值. 1.Java代码创建一个连接并请求该连接返回的数据 doGet()方法,execute()方法中调用 package dem ...

  2. 系统间通信(5)——IO通信模型和JAVA实践 下篇

    7.异步IO 上面两篇文章中,我们分别讲解了阻塞式同步IO.非阻塞式同步IO.多路复用IO 这三种IO模型,以及JAVA对于这三种IO模型的支持.重点说明了IO模型是由操作系统提供支持,且这三种IO模 ...

  3. Android : App通过LocalSocket 与 HAL间通信

    LocalSocket其通信方式与Socket差不多,只是LocalSocket没有跨越网络边界.对于*nix系统来说,“一切皆为文件”,Socket也不例外,Socket按照收发双方的媒介来说有三种 ...

  4. 线程间通信 GET POST

    线程间通信有三种方法:NSThread   GCD  NSOperation       进程:操作系统里面每一个app就是一个进程. 一个进程里面可以包含多个线程,并且我们每一个app里面有且仅有一 ...

  5. Linux下不同服务器间数据传输--转载

    因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp, ...

  6. Linux下不同服务器间数据传输

    因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp, ...

  7. linux下不同服务器间数据传输(rcp,scp,rsync,ftp,sftp,lftp,wget,curl)(zz)

    linux下不同服务器间数据传输(rcp,scp,rsync,ftp,sftp,lftp,wget,curl) 分类: linux2011-10-10 13:21 8773人阅读 评论(1) 收藏 举 ...

  8. 系统间通信(10)——RPC的基本概念

    1.概述 经过了详细的信息格式.网络IO模型的讲解,并且通过JAVA RMI的讲解进行了预热.从这篇文章开始我们将进入这个系列博文的另一个重点知识体系的讲解:RPC.在后续的几篇文章中,我们首先讲解R ...

  9. 系统间通信(9)——通信管理与RMI 下篇

    接上文<架构设计:系统间通信(8)--通信管理与RMI 上篇>.之前说过,JDK中的RMI框架在JDK1.1.JDK1.2.JDK1.5.JDK1.6+几个版本中做了较大的调整.以下我们讨 ...

随机推荐

  1. android stack error message is Fail to start the plugin

    E: 08-26 16:34:11.934: E/AliSDK(32236): 错误编码 = 1002208-26 16:34:11.934: E/AliSDK(32236): 错误消息 = SDK  ...

  2. OC 成员变量作用域

    1.  成员变量作用域:    @public :在任何地方都能直接访问对象的成员变量.    @private :只能在当前类的对象方法中直接访问.(@implementation中默认是@priv ...

  3. String str 与 String str=new String("") 区别

    1.当使用String str="abc",这种方式时,先去内存的Heap中找是否存在"abc"这个字符串,若存在,则将地址引用.若不存在则创建. 2.当使用S ...

  4. 【ios控件】UIScrollView 事件说明

    // // UIDemoViewController.m // 06-1UIScrollDemo // // Created by k on 14-9-4. // Copyright (c) 2014 ...

  5. [Bootstrap]概述

    ——1.html,css,javascript框架                ——2.一般开发响应式布局或者移动优先的项目可以优先考虑 优点 1.css开发版本(可以直接上手)和源码版本(可根据l ...

  6. 【leetcode】4. Median of Two Sorted Arrays

    题目描述: There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of t ...

  7. 问题解决:两台虚拟机不能互相ping通的原因

    要是两台虚拟机能够PING通下列要求缺一不可:1.你所设置的虚拟网络的网络号不能跟外面你正在使用的真实的网络号一样2.防火墙必须关闭3.你设置的那俩台虚拟机必须在同一网段内4.两台虚拟机的主机名不能相 ...

  8. 【转】fread函数和fwrite函数

    1.函数功能   用来读写一个数据块. 2.一般调用形式   fread(buffer,size,count,fp);   fwrite(buffer,size,count,fp); 3.说明   ( ...

  9. UVALive 6811 Irrigation Line(二分图最小点覆盖--匈牙利算法)

    题意:求最少的线可以覆盖一个由0.1两种数字组成的图中所有的1. eg: 只需要两条线即可. 分析: 1.先为上述例子的行列标号 2.若图中数字为1,则代表该数字所在的行与列有关联. 例如第r1行第c ...

  10. Excel 数据分析技巧

    分享一个小技巧,Excel中,统计数据后,根据数据点之间的趋势,描绘出大致的曲线图,并且得到对于的公式. 1. 给出示例数据 2. 插入->散点图,右键点,选择添加趋势线,可以根据点数的走向,来 ...