Pomelo Client
使用pomelo做服务器开发时,无论什么客户端,只要遵循与服务器的线上协议就能够与服务器建立通信。pomelo内置sioconnector、hybirdconnector都定义了自己的协议格式。
服务器通信协议
配置服务器通信协议
$ vim game-server/app.js
const pomelo = require('pomelo');/*** 初始化应用*/
const app = pomelo.createApp();
app.set('name', 'test');//前端服务器配置
app.configure('production|development', 'connector', function(){//连接配置app.set('connectorConfig',{connector : pomelo.connectors.hybridconnector,heartbeat : 3,useDict : true,useProtobuf : true});
});//开启应用
app.start();process.on('uncaughtException', function (err) {console.error(' Caught exception: ' + err.stack);
});
Pomelo支持的通信协议
在与客户端通信时pomelo提供了hybirdconnector和sioconnector,hybirdconnector支持TCP、WebSocket,sioconnector支持socket.io。实际编程中,可使用pomelo提供的接口自定义connector。
前端服务器 | 类 | 协议 | 通信 | 适用范围 |
---|---|---|---|---|
hybirdconnector | pomelo.connectors.hybirdconnector | TCP、WebSocket | 使用二进制通信 | 移动端 |
sioconnector | pomelo.connectors.sioconnector | socket.io | 使用JSON通信 | PC端 |
udpconnector | pomelo.connectors.udpconnector | UDP | 二进制协议 | 网路环境差数据包小的环境 |
mqttconnector | pomelo.connectors.mqttconnector | MQTT | 二进制物联网协议 | 嵌入式设备 |
pomelo内部有各种协议的实现,典型的有protobuf、mqtt。mqtt物联网协议的特点是体积小、效率高、省电,pomelo+mqtt能实现单机30w在线的推送。
Web端API
Web端JavaScript开发库
对于浏览器来说,HTML5中已经支持了WebSocket,因此使用支持WebSocket的浏览器可以直接与服务器的hybirdconnector建立通信。对于比较旧的浏览器,还没有支持websocket的可使用基于socket.io的方式与服务器建立连接。因此,对于Web端,Pomelo提供了两套开发库,分别适用于支持WebSocket的浏览器和不支持WebSocket的浏览器。
开发库 | 描述 |
---|---|
pomelo-jsclient-socket.io | 适用于socket.io |
pomelo-jsclient-websocket | 适用于websocket |
无论是socket.io还是websocket都提供了统一的API
初始化
pomelo.init(params, cb);
客户端pomelo初始化,在客户端第一次调用时使用。参数params中需要指定连接的服务器的主机地址和端口,回调函数cb在连接成功后会进行回调。
pomelo.init = function(params, cb){pomelo.params = params;params.debug = true;var host = params.host;var port = params.port;var url = 'ws://' + host;if(port) {url += ':' + port;}socket = io(url, {'force new connection': true, reconnect: false});socket.on('connect', function(){console.log('[pomeloclient.init] websocket connected!');if (cb) {cb(socket);}});socket.on('reconnect', function() {console.log('reconnect');});socket.on('message', function(data){if(typeof data === 'string') {data = JSON.parse(data);}if(data instanceof Array) {processMessageBatch(pomelo, data);} else {processMessage(pomelo, data);}});socket.on('error', function(err) {console.log(err);});socket.on('disconnect', function(reason) {pomelo.emit('disconnect', reason);});
};
请求服务
pomelo.request(route, msg, cb);
request
用于请求服务,route
是服务端的路由,格式为"xxx.xxx.xxx"。msg
为请求内容,cb
响应回来后的回调函数。
参数 | 描述 |
---|---|
route
|
服务端的路由,格式为"xxx.xxx.xxx"。 |
msg
|
请求内容 |
cb
|
响应成功后的回调函数 |
pomelo.request = function(route) {if(!route) {return;}var msg = {};var cb;arguments = Array.prototype.slice.apply(arguments);if(arguments.length === 2){if(typeof arguments[1] === 'function'){cb = arguments[1];}else if(typeof arguments[1] === 'object'){msg = arguments[1];}}else if(arguments.length === 3){msg = arguments[1];cb = arguments[2];}msg = filter(msg,route);id++; callbacks[id] = cb;var sg = Protocol.encode(id,route,msg);socket.send(sg);
};
例如:同网关服务器建立连接后 ,向其发送查询前端服务器入口的请求。
/*** 连接gate服务器* 客户端首先要给gate服务器查询一个connector服务器,gate给其回复一个connector的地址及端口号* */
function queryEntry(data, callback){const config = {host:"127.0.0.1", port:3014, log:true};pomelo.init(config, function(socket){const route = "gate.gateHandler.queryEntry";pomelo.request(route, data, function(msg){pomelo.disconnect();if(!msg){msg = {code:500, msg:"error"};}callback(msg);});});
}
主动断开连接
pomelo.disconnect();
disconnect()
方法用于Pomelo主动断开连接
pomelo.disconnect = function() {if(socket) {socket.disconnect();socket = null;}
};
从EventEmmiter继承过来的方法
on()
方法用于从EventEmmiter
继承过来,用来对服务端的推送做出响应。route
用户可以自定义,格式一般为onXXX
。
pomelo.on(route, cb);
EventEmitter.prototype.on = EventEmitter.prototype.addListener;
例如:
//消息监听
pomelo.on("disconnect", function(msg){console.log("disconnect", msg);
});
Pomelo Client相关推荐
- pomelo客户端开发
使用pomelo做服务端开发时,无论什么客户端,只要能遵循与服务端的线上协议,就能够与服务端建立通信.pomelo内建提供的sioconnector和hybridconnector都定义了自己的协议格 ...
- 自己构建pomelo的Cocos2d-iPhone Client
首先.从github上把pomelo-ios Client (https://github.com/NetEase/pomelo-iosclient)下载下来,并且将其依赖的第三方库socket.io ...
- pomelo mysql_pomelo连接mySQL
准备工作: 已安装mysql 的windows版本 先安装依赖库 npm install mysql npm install generic-pool 创建文件: 250bede596931142be ...
- [原]pomelo开发环境搭建
pomelo基于nodejs服务器开源框架,比较牛逼的! 1.安装nodejs(官网下载地址) 安装python等 具体见官网说明 2.安装pomelo(见官方步骤)或者 http://blog.cs ...
- FMS4.5 (Flash media server)视频服务器安装和配置以及pomelo聊天室的调用
CentOS 6.2安装Flash Media Server 4.5 简而言之,Adobe的FMS是一个多媒体应用平台,在这个平台上,可以实现多媒体流的点播.直播.交互等多种应用,由于Adobe公司在 ...
- pomelo mysql_pomelo链接mysql
需求:玩家购买物品够添加到数据库中,以保存数据 准备工作: 已安装mysql 的windows版本 先安装依赖库 npm install mysql npm install generic-pool ...
- Pomelo 使用教程
继"Hello World"之后,我们参照官方文档,以一个"Chat"为例进一步学习Pomelo的使用.在本文中,将会涵盖筛选器.路由及消息压缩.RPC调用.组 ...
- pomelo mysql_pomelo中使用mysql
声明:本人纯服务器开发新手菜鸟,分析的不一定正确,分析的也没啥技术含量,主要是mysql的使用比较分散,集中到一起给新手看着省事,也可能会误导大家,自己小心点. 准备工作: 1.先创建mysql.js ...
- Pomelo Connection
连接组件connection connection连接组件是一个功能相对简单的组件,仅被前端服务器加载,为connectionService连接服务提供一个组件包装. connection连接组件主要 ...
最新文章
- 2021学科排名:中国12个工科世界第一,网友:全是不吃香的
- Array.splice()--删除数组中重复的数据
- 判断一个变量是不是指针
- 【分布式】Zookeeper请求处理
- linux下安装nvm进行node的版本的快速切换
- 解决域中打印机不能共享打印的问题
- AI 换脸?除了 ZAO,用 Python 一样轻松搞定
- 中如何构造有参和无惨_导数中构造函数的神力你应该借助一下
- 09_用户登录退出实现
- 孙鑫老师的帮助文档 MSDN Library 2001January 下载地址
- 数据治理之IT系统存量信息梳理
- 计算机D盘无法读取,D盘目录或文件已损坏,无法读取解决方案
- 关键字深度剖析,集齐所有关键字可召唤神龙?【完】
- Fleck说明文档翻译
- 计算机中文字体的独创性,计算机中文字体中单字的著作权保护研究(2)
- 第十一次 作业 视图的应用
- 畸变校正与极线校正(具体原理+Matlab代码)
- 一维数据二维化的办法汇总(二)
- app推广必备功能:分享到,更多应用,创建快捷方式
- 来讲讲新生代剪辑工具,人工智能视频剪辑软件王者剪辑