为了练手,给聊天应用增加一个rpc调用和一个time类型的服务器,在servers/time/remote/timeRemote.js中,添加如下代码:

module.exports.getCurrentTime = function (arg1, arg2, cb) {
console.log("timeRemote - arg1: " + arg1+ "; " + "arg2: " + arg2);
var d = new Date();
var hour = d.getHours();
var min = d.getMinutes();
var sec = d.getSeconds();
cb( hour, min, sec);
};

  在gate中调用后console出来:

// gateHandler.js
var routeParam = Math.floor(Math.random()*10);
app.rpc.time.timeRemote.getCurrentTime(routeParam, arg1, arg2, function(hour, min, sec) {
// ...
});

  当有多个time服务器的时候,需要在app.js配置route规则:

var router = function(routeParam, msg, context, cb) {
var timeServers = app.getServersByType('time');
var id = timeServers[routeParam % timeServers.length].id;
cb(null, id);
} app.route('time', router);

  在服务器配置config/servers.json中增加time服务器如下:

"time":[
{"id": "time-server-1", "host":"127.0.0.1", "port" : 7000},
{"id": "time-server-2", "host":"127.0.0.1", "port" : 7001}
]

  需要注意的是,有两个导出方式,即导出对象和函数

module.exports = function(app) {
return new ChatRemote(app);
}; // timeRemote.js
module.exports.getCurrentTime(arg1, arg2, cb) {
// ...
};

  对于当前端服务器接受客户端请求,将请求路由给后端服务器时,pomelo使用的是发起一个系统级远程调用的方式,这个时候会使用session作为rpc请求的路由参数,这也是我们看到的前面在给chat配置路由的时候,路由函数的第一个参数总是session。在time中,我们使用了一个随机整数作为路由参数,因此time的路由函数的第一个参数也就是这个随机整数了。实际上pomelo的rpc框架对于路由参数的使用是没有限制的,并不仅限于一直使用session。

  0.8版本以后,当进行rpc调用的时候,可以跳过路由计算而直接将调用发送到一个具体的服务器或者广播到一类服务器的调用方式,代码示例如下:

// route
var routeParam = session;
app.rpc.area.playerRemote.leaveTeam(routeParam, args..., cb); //根据routeParam来进行路由计算 // to specified server 'area-server-1'
app.rpc.area.playerRemote.leaveTeam.toServer('area-server-1', args..., cb); //直接指定路由 // broadcast to all the area servers
app.rpc.area.playerRemote.leaveTeam.toServer('*', args..., cb); //指定所有的路由

  

给Pomelo的聊天室添加time的RPC调用的更多相关文章

  1. JAVA-Socket通信 打造属于自己的聊天室(服务端)

    我们每天都在使用着微信.QQ等聊天软件,但不知你是否有想过这些聊天软件是如何实现的?是否想过要制作一个属于自己的聊天室? 本篇博客将带你打造一个简单的属于自己的聊天室,将cmd作为聊天窗口,可通过内网 ...

  2. JAVA实现webSocket网页聊天室

    一.什么是webSocket WebSocket 是一种网络通信协议,是持久化协议.RFC6455 定义了它的通信标准. WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全 ...

  3. Java基础知识强化之网络编程笔记05:UDP之多线程实现聊天室案例

    1. 通过多线程改进刚才的聊天程序,这样我就可以实现在一个窗口发送和接收数据了 2.  代码示例: (1)SendThread.java,如下: package com.himi.udpDemo2; ...

  4. Pomelo聊天室框架

    聊天室是验证服务器最典型的例子,Pomelo的运行架构: 在这个架构里,前端服务器也就是connector专门负责承载连接, 后端的聊天服务器则是处理具体逻辑的地方. 这样扩展的运行架构具有如下优势: ...

  5. android 开发 写一个RecyclerView布局的聊天室,并且添加RecyclerView的点击事件

    实现思维顺序: 1.首先我们需要准备2张.9的png图片(一张图片为左边聊天泡泡,一个图片为右边的聊天泡泡),可以使用draw9patch.bat工具制作,任何图片导入到drawable中. 2.需要 ...

  6. ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(四) 添加表情、群聊功能

    休息了两天,还是决定把这个尾巴给收了.本篇是最后一篇,也算是草草收尾吧.今天要加上表情功能和群聊.基本上就差不多了,其他功能,读者可以自行扩展或者优化.至于我写的代码方面,自己也没去重构.好的,我们开 ...

  7. 聊天室(C++客户端+Pyhton服务器)2.基本功能添加

    根据之前的框架添加新的功能 登录 点击相关按钮 // 登录按钮的响应void CMainDialog::OnBnClickedLogin(){ // 1. 获取用户输入的数据 UpdateData(T ...

  8. 为美多商城(Django2.0.4)添加基于websocket的实时通信,主动推送,聊天室及客服系统

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_67 websocket是个啥? webSocket是一种在单个TCP连接上进行全双工通信的协议 webSocket使得客户端和服务 ...

  9. 基于select的python聊天室程序

    python网络编程具体参考<python select网络编程详细介绍>. 在python中,select函数是一个对底层操作系统的直接访问的接口.它用来监控sockets.files和 ...

随机推荐

  1. VHD容量调整的方法(保存原有vhd)

    VHD容量调整的方法(保存原有vhd)特别对于RAMOS的VHD,调整VHD容量的办法:1.在WIN7或者7PE中,右击我的电脑→管理→磁盘管理,挂载原始VHD文件,然后新建一个VHD文件,初始化,格 ...

  2. 你的float用对了吗

    介绍 很多人都知道float是浮点类型,它不能表示数据范围内的所有数值.但是,实际使用或编码时,你又是否记得这句话呢?下面是stackoverflow中的一个问题: why does a float ...

  3. A标签中通过href和onclick传递的this对象

    在blog的后台管理中允许为一个分类添加一个地址,但是不好添加onclick事件.想传递当前对象给一个函数,于是就将这个URL写成"Javascript:shoControlSidebar( ...

  4. php script 的生命周期

    原文地址:https://support.cloud.engineyard.com/hc/en-us/articles/205411888-PHP-Performance-I-Everything-Y ...

  5. PAT (Advanced Level) 1020. Tree Traversals (25)

    递归建树,然后BFS一下 #include<iostream> #include<cstring> #include<cmath> #include<algo ...

  6. CSS实现三角形方法一--rotate+relative

    方法说明:两个正方形,一个小的,一个大的,将大的正方向进行旋转,然后移动到小的正方形的合适位置,覆盖小正方形的一部分,使小正方形剩余部分为三角形,再把大正方形的背景色改为浏览器窗口的颜色. 用到知识: ...

  7. BP神经网络的Java实现

    http://fantasticinblur.iteye.com/blog/1465497

  8. FreeRTOS代码剖析

    FreeRTOS代码剖析之1:内存管理Heap_1.c   FreeRTOS代码剖析之2:内存管理Heap_2.c   FreeRTOS(V8.0.1)系统之xTaskGenericCreate() ...

  9. 制作win10 usb 启动盘

    Rufus 是一个开源的USB启动盘制作程序.其特点就是快速,且支持各种系统,包括各种windows系统,linux系统,使用也很简单. Rufus主页: http://rufus.akeo.ie/ ...

  10. WPF教程:附加属性

    一.附加属性的特点1.特殊的依赖属性2.用于非定义该属性的类 例如Grid面板的RowDefinition.ColumnDefinition.Canvas面板的Left.RightDockPanel面 ...