给Pomelo的聊天室添加time的RPC调用
为了练手,给聊天应用增加一个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调用的更多相关文章
- JAVA-Socket通信 打造属于自己的聊天室(服务端)
我们每天都在使用着微信.QQ等聊天软件,但不知你是否有想过这些聊天软件是如何实现的?是否想过要制作一个属于自己的聊天室? 本篇博客将带你打造一个简单的属于自己的聊天室,将cmd作为聊天窗口,可通过内网 ...
- JAVA实现webSocket网页聊天室
一.什么是webSocket WebSocket 是一种网络通信协议,是持久化协议.RFC6455 定义了它的通信标准. WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全 ...
- Java基础知识强化之网络编程笔记05:UDP之多线程实现聊天室案例
1. 通过多线程改进刚才的聊天程序,这样我就可以实现在一个窗口发送和接收数据了 2. 代码示例: (1)SendThread.java,如下: package com.himi.udpDemo2; ...
- Pomelo聊天室框架
聊天室是验证服务器最典型的例子,Pomelo的运行架构: 在这个架构里,前端服务器也就是connector专门负责承载连接, 后端的聊天服务器则是处理具体逻辑的地方. 这样扩展的运行架构具有如下优势: ...
- android 开发 写一个RecyclerView布局的聊天室,并且添加RecyclerView的点击事件
实现思维顺序: 1.首先我们需要准备2张.9的png图片(一张图片为左边聊天泡泡,一个图片为右边的聊天泡泡),可以使用draw9patch.bat工具制作,任何图片导入到drawable中. 2.需要 ...
- ASP.NET SignalR 与LayIM配合,轻松实现网站客服聊天室(四) 添加表情、群聊功能
休息了两天,还是决定把这个尾巴给收了.本篇是最后一篇,也算是草草收尾吧.今天要加上表情功能和群聊.基本上就差不多了,其他功能,读者可以自行扩展或者优化.至于我写的代码方面,自己也没去重构.好的,我们开 ...
- 聊天室(C++客户端+Pyhton服务器)2.基本功能添加
根据之前的框架添加新的功能 登录 点击相关按钮 // 登录按钮的响应void CMainDialog::OnBnClickedLogin(){ // 1. 获取用户输入的数据 UpdateData(T ...
- 为美多商城(Django2.0.4)添加基于websocket的实时通信,主动推送,聊天室及客服系统
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_67 websocket是个啥? webSocket是一种在单个TCP连接上进行全双工通信的协议 webSocket使得客户端和服务 ...
- 基于select的python聊天室程序
python网络编程具体参考<python select网络编程详细介绍>. 在python中,select函数是一个对底层操作系统的直接访问的接口.它用来监控sockets.files和 ...
随机推荐
- web开发后端开源库收集
1.Gregwar/Captcha 项目地址:https://github.com/Gregwar/Captcha
- 基于POI的Excel导入导出(JAVA实现)
今天做了个excel的导入导出功能,在这记录下. 首先现在相关poi的相关jar包,资源链接:http://download.csdn.net/detail/opening_world/9663247 ...
- SpringMvc MultipartFile 图片文件上传
spring-servlet.xml <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id="multipar ...
- mariadb cache
Since MariaDB Galera cluster versions 5.5.40 and 10.0.14 you can use the query cache. Earlier versio ...
- 改变nova-compute默认位置的方法
# cat /etc/nova/nova.conf |grep -n state_path|grep -v '#'314:state_path=/var/lib/nova
- codeforce 611A New Year and Days
#include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using ...
- NSString之Format
三点用法总结: 类型转换:基本类型到对象类型 需要调用NSString的fotmat方法 NSString *location = [NSString stringWithFormat:@&quo ...
- iOS AFN向接口端传递JSON数据
NSDictionary *body = @{@"snippet": @{@"topLevelComment":@{@"snippet":@ ...
- css3动画-transition
当css属性改变的时候,控制animation的速度,让属性的变化发生在一段时间之内,而不是立即生效. 语法 transition: <property> <duration> ...
- time.setToNow() 取当前时间,月份有误
[java] view plaincopy Time time = new Time("GMT+8"); time.setToNow(); int year = time.ye ...