当前位置: 首页 > news >正文

郑州市哪里有网站建设江苏泰州海陵区建设局网站

郑州市哪里有网站建设,江苏泰州海陵区建设局网站,开发一个网站成本,郑州比较好的外贸公司聊天服务器扩展 大家在上一篇文章里相信已经学会了pomelo框架的基本用法了#xff0c;那么我们在上一篇文章的代码基础上继续扩展#xff0c;丰富系统#xff0c;另外也熟悉下他的更多的用法#xff0c;这一节我将扩展它#xff1a;增加一个机器人自动聊天的功能。 目的…聊天服务器扩展 大家在上一篇文章里相信已经学会了pomelo框架的基本用法了那么我们在上一篇文章的代码基础上继续扩展丰富系统另外也熟悉下他的更多的用法这一节我将扩展它增加一个机器人自动聊天的功能。 目的是让大家熟悉下定时器的用法另外再熟悉下RPC方式。 rpc调用 pomelo中使用rpc调用进行进程间通信在pomelo中rpc调用分为两大类使用namespace进行区分namespace为sys的为系统rpc调用它对用户来说是透明的目前pomelo中系统rpc调用有 1.后端服务器向前端服务器请求session信息 2.后端服务器通过channel推送消息时对前端服务器发起的rpc调用 3.前端服务器将用户请求路由给后端服务器时也是sys rpc调用 除了系统rpc调用外其余的由用户自定义的rpc调用属于user namespace的rpc调用需要用户自己完成rpc服务端remote的handle代码并由rpc客户端显式地发起调用. 服务器间RPC调用的抽象介绍 架构中各服务器之间的通讯主要是通过底层RPC框架来完成的该RPC框架主要解决了进程间消息的路由和RPC底层通讯协议的选择两个问题。 服务器间的RPC调用也实现了零配置。实例如下图所示 上图的remote目录里定义了一个RPC接口 chatRemote.js它的接口定义如下 chatRemote.kick function(uid, player, cb) {} 其它服务器RPC客户端只要通过以下接口就可以实现RPC调用 app.rpc.chat.chatRemote.kick(session, uid, player, function(data){}); 这个调用会根据特定的路由规则转发到特定的服务器。如场景服务的请求会根据玩家在哪个场景直接转发到对应的server。 rpc的使用远比其它rpc框架简单好多因为我们无需写任何配置文件也无需生成stub。因为我们服务器抽象的实现的方式使得rpc客户端可以在应用启动时扫描服务器目录自动生成stub对象。 完成了以上三个目标 一个实时的分布式应用框架的轮廓就搭出来了。接下来我们在下一章节里说明下在当前demoserver的基础上不断地扩充丰富它的功能。 拿起键盘就是干 我的思路是玩家在连接到服务器之后在connector服务器创建一个定时器每1秒向登录进来的客户端发送消息当然发送的消息内容你可以随机也可以固定推送给客户端消息的方式是通过调用一个time服务器的RPC方式pushmsg。 好了拿起键盘开干 由于增加了一个time服务器所以第一步先往配置文件里server.json里配服务器 {development:{connector:[{id:connector-server-1, host:127.0.0.1, port:4050, clientPort: 3050, frontend: true},{id:connector-server-2, host:127.0.0.1, port:4051, clientPort: 3051, frontend: true},{id:connector-server-3, host:127.0.0.1, port:4052, clientPort: 3052, frontend: true}],chat:[{id:chat-server-1, host:127.0.0.1, port:6050},{id:chat-server-2, host:127.0.0.1, port:6051},{id:chat-server-3, host:127.0.0.1, port:6052}],gate:[{id: gate-server-1, host: 127.0.0.1, clientPort: 3014, frontend: true}],time:[{id: time-server-1, host: 127.0.0.1, port: 7052}]},production:{connector:[{id:connector-server-1, host:127.0.0.1, port:4050, clientPort: 3050, frontend: true},{id:connector-server-2, host:127.0.0.1, port:4051, clientPort: 3051, frontend: true},{id:connector-server-3, host:127.0.0.1, port:4052, clientPort: 3052, frontend: true}],chat:[{id:chat-server-1, host:127.0.0.1, port:6050},{id:chat-server-2, host:127.0.0.1, port:6051},{id:chat-server-3, host:127.0.0.1, port:6052}],gate:[{id: gate-server-1, host: 127.0.0.1, clientPort: 3014, frontend: true}],time:[{id: time-server-1, host: 127.0.0.1, port: 7052}] } } 还有adminServer.json [{type: connector,token: agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn }, {type: chat,token: agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn },{type: gate,token: agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn },{type: time,token: agarxhqb98rpajloaxn34ga8xrunpagkjwlaw3ruxnpaagl29w4rxn }] 我在connector服务器增加一个定时器的回调ticktick函数的功能很简单通过RPC方式调用定时器远端的pushmsg方法将自动聊天的内容发送给客户端 Handler.prototype.tick function(session,uid,rid) {//run all the action//put user into channelconsole.log(定时器触发了);this.app.rpc.time.timeRemote.pushmsg(session, uid, this.app.get(serverId), rid, true); } 接下来我们在enter的路由下面做处理向time服务器注册玩家的uidrid信息到时候time服务器在推送消息的时候就知道往哪里发送了。因此添加三行代码 /*** New client entry chat server.** param {Object} msg request message* param {Object} session current session object* param {Function} next next stemp callback* return {Void}*/ Handler.prototype.enter function(msg, session, next) {var self this;var rid msg.rid;var uid msg.username * ridvar sessionService self.app.get(sessionService);//duplicate log inif( !! sessionService.getByUid(uid)) {next(null, {code: 500,error: true});return;}session.bind(uid);session.set(rid, rid);session.push(rid, function(err) {if(err) {console.error(set rid for session service failed! error is : %j, err.stack);}});session.on(closed, onUserLeave.bind(null, self.app));//put user into channelself.app.rpc.chat.chatRemote.add(session, uid, self.app.get(serverId), rid, true, function(users){next(null, {users:users});});this.app.rpc.time.timeRemote.add(session, uid, this.app.get(serverId), rid, true);console.log(当前的connectorid: self.app.get(serverId)); setInterval(this.tick.bind(this), 1000,session,uid,rid); }; 到了我们的time服务器编写的时间了创建time/remote目录增加timeRemote.js的处理 module.exports function(app) {return new TimeRemote(app); };var TimeRemote function(app) {this.app app;this.channelService app.get(channelService); }; TimeRemote.prototype.add function(uid, sid, name, flag) {var channel this.channelService.getChannel(name, flag);var username uid.split(*)[0]; if( !! channel) {channel.add(uid, sid);} }; TimeRemote.prototype.pushmsg function(uid, sid, name, flag) {var channel this.channelService.getChannel(name, flag);var username uid.split(*)[0];console.log(定时器收到通知uid---------sidusername:username);var param {route: onChat,msg: hello this is robot,from: robot,target: username};channel.pushMessage(param); }; 到了我们的测试阶段 浏览器打开http://localhost:3001,登录后看到机器人自动给客户端发送了消息 更多pomelo框架的开发使用请关注我
http://www.pierceye.com/news/934762/

相关文章:

  • 企业网站托管套餐南通企业建站系统模板
  • 汉中网站建设服务网站宣传推广平台
  • 关于科技园区建设文章的网站软文兼职10元一篇
  • 免费隐私网站推广海宁自适应网站建设
  • ipad网站制作网络平台怎么建立网站吗
  • 午夜资源站诸暨北京有哪些网站制作公司
  • 无忧自助建站安卓手机建站
  • 网站建设怎设计榆林市城乡建设规划局网站
  • 网站建设相关资讯做网站 思源字体
  • 辽宁网站设计国家开发大学网站作业怎么做
  • 仿西部数码网站注册建筑设计师
  • 南昌企业网站设计建设制作怎么删除ghost wordpress
  • 如何建个人免费网站手机怎么做网站免费的
  • 目前做那个网站能致富怎么增加网站的权重
  • 无锡网站建设818gx中国机械加工网卸粮四通
  • 淘宝网网站建设出入南京最新通知今天
  • 做企业网站项目的心得做网站一定要后台嘛
  • 青峰集团响应式网站论坛网站怎么做跳转
  • 代网站建设制作微信公众号网站开发
  • 潍坊网站的公司电话网站关键字多少个
  • 网站开发确认书青岛做网站的公司哪个好
  • 权威的企业网站建设网站开发费用算无形资产吗
  • 网站安全在线检测网络制作软件
  • 潍坊网站设计制作威宁住房和城乡建设局网站
  • 哈尔滨企业建站网站开发推广文案怎么写
  • 建立电子商务网站目的想要开网店怎么开
  • iis怎么建设网站内容杭州做搜索引擎网站的公司
  • 兰州网站开发价格建设和住房保障部 网站
  • 机械设备网站建设效果好的徐州网站开发
  • 商丘网站建设专业现状桓台县网站建设