100万条数据有顺序,每条数据包有相应的时戳进行延时控制。
单机做不了,得群集,可以用guid做标识,放入消息队列
//连接广播
UH.WebSocket.connect(AppConfig.wsUrl);
websocket.js:
var NetControl={
_sock:{}, //当前的webSocket的对象
_name : "socket",
setName: function (name) {
this._name = name;
},
connect: function (url) {//新建socket对象
this._sock = new WebSocket(url);
this._sock.onopen = this._onOpen.bind(this);
this._sock.onclose = this._onClose.bind(this);//
this._sock.onmessage = this._onMessage.bind(this);//收到广播消息
this._sock.onerror = this._onError.bind(this);
},
_onOpen:function(evt){
var key = name + "onopen";
GlobalEventManager.emit(key, evt);
this.hasConnect = true;//已连接的标志
this.send("connect");
},
_onClose:function(evt){
var key = name + "onclose";
GlobalEventManager.emit(key, evt);
if (this.hasConnect) {
//被动断开要重连
this.connect(AppConfig.wsUrl);
}
},
_onMessage:function(evt){
var key = name + "onmessage";
GlobalEventManager.emit(key, evt);
var jsonData = JSON.parse(evt.data);
if (jsonData) { //处理接受消息的逻辑 }
},
_onError:function(evt){
var key = name + "onerror";
GlobalEventManager.emit(key, evt);
//被动断开要重连
this.reConnect();
},
send:function(msg){//手动发送message
this._sock.send(msg);
},
close: function () {//手动关闭websocket
cc.log("Websocket close");
this.hasConnect = false;
if (this._sock) {
this._sock.close();
this._sock = null;
this._onClose();
}
},
reConnect: function () {//重连
cc.log("Websocket reconnent");
this.close();
this.connect(AppConfig.wsUrl);
},
};
module.exports=NetControl;
通过消息队列做分布式集群吧
可以考虑kafka,一个分区内的消息都是顺序性的,不同分区没法保证顺序性。你这每秒100万的收发,只能做集群了,而且还得对数据进行分类。
数据包带时间戳且有精度要求,说明你的数据有时效性,队环境要求很高。
使用缓存消息队列加集群 读写分离 减少数据库的压力
那你为啥不考虑使用kafka,activeMq这些消息中间件