安裝包:npm install websocket-extensions
心跳測試文件:
const socket = weex.requireModule('webSocket');
var i = 0;
console.log(socket)
var socketioWarpper = (function() {
function connect(host) {
socket.WebSocket(host,'');
}
function getHostUrl(host) {
return "ws://"+ host +"/socket.io/?EIO=3&transport=websocket"
}
function responseEvent(bind, event) {
var _this = bind;
return function(message) {
if(_this.eventBus && _this.eventBus[event] ) {
var eventCbList = _this.eventBus[event];
eventCbList.forEach(function(eventCb) {
if( typeof eventCb === 'function' ) {
eventCb( message );
}
});
}
}
}
function responseMessageEvent(bind) {
var _this = bind;
return function( msg ) {
if( !msg || !msg.data) {
return;
}
if( _this.eventBus && _this.eventBus['message'] && typeof _this.eventBus['message'] === 'function' ) {
_this.eventBus['message'](msg.data);
}
var message = parseMsg( msg.data );
if( message ) {
if( message.event && message.message ) {
if( _this.eventBus && _this.eventBus[message.event] ) {
var eventCbList = _this.eventBus[message.event];
eventCbList.forEach(function(eventCb) {
if( typeof eventCb === 'function' ) {
eventCb( message.message );
}
});
}
}
}
}
}
function createConnect(host, channelId) {
function bindSocket(wrapper) {
connect(getHostUrl(host));
if(socket) {
socket.onclose = responseEvent(wrapper, 'close' );
socket.onopen = responseEvent( wrapper, 'open' );
socket.onmessage = responseMessageEvent(wrapper);
socket.onerror = responseEvent( wrapper, 'error' );
}
wrapper.host = host;
wrapper.socket = socket;
}
bindSocket( this );
var _this = this;
this.onOpen(function() {
function reConnectionListener() {
if(socket.readyState === 3 ) {
bindSocket(_this);
}
setTimeout(reConnectionListener, 1000);
};
function heatbeat() {
// if(socket.readyState === 1 ) {
send('register', {'channelId': channelId});
send('chatevent',{userName: "user76", message: i++});
// }
setTimeout(heatbeat, 20000);
}
heatbeat();
reConnectionListener();
});
return this;
}
function parseMsg(msg) {
// console.log( msg );
if( typeof msg === 'object' ) {
return msg;
}
if( typeof msg === 'string' && msg.startsWith('42') ) {
msg = msg.replace('42[', '[');
var obj = JSON.parse(msg);
var event = obj[0];
var msgObj = obj[1];
return {
event: event,
message: msgObj
}
}
}
function wrapMsg(event, msg) {
var arr = [event, msg];
return '42' + JSON.stringify( arr );
}
function onEvent(event, cb ) {
var list = this.eventBus[event] || [];
list.push( cb );
this.eventBus[event] = list;
}
function registerEvent(event) {
return function(cb) {
var list = this.eventBus[event] || [];
list.push(cb);
this.eventBus[event] = list;
}
}
function send(event, msg) {
try{
var result = socket.send( wrapMsg(event, msg) );
} catch(error) {
console.error(error);
}
}
return function() {
var result = {
eventBus: {},
connection: createConnect,
onClose: registerEvent('close'),
onOpen: registerEvent('open'),
onError: registerEvent('error'),
onMessage: registerEvent('message'),
onEvent: onEvent,
onSend: send
};
return result;
}();
})();
export default socketioWarpper