socket.io java demo_微信小程序 SocketIO 实例讲解

本文介绍如何在微信小程序中使用SocketIO进行网络通信,包括连接、发送消息、断开连接等操作,并提供了一个DEMO项目以演示接入Socket.IO官方聊天室。详细步骤和示例代码有助于开发者理解和应用。
摘要由CSDN通过智能技术生成

微信小程序 ScoketIO 简单实例:

现在好的人在搞微信小程序,ScoketIO 是微信的网络通信,它的重要性不言而喻,这里给大家讲讲如何使用以及注意事项!

微信小程序 的SocketIO 实现,基于CFETram 的实现基础上完善

const emitter = require('./emitter.js');

/** socket.io 协议常量 */

var packets = {

open: 0 // non-ws

, close: 1 // non-ws

, ping: 2

, pong: 3

, message: 4

, upgrade: 5

, noop: 6

};

var events = {

CONNECT: 0,

DISCONNECT: 1,

EVENT: 2,

ACK: 3,

ERROR: 4,

BINARY_EVENT: 5,

BINARY_ACK: 6

};

const PING_CHECK_INTERVAL = 2000;

class WxSocketIO {

connect(url) {

return new Promise((resolve, reject) => {

wx.onSocketOpen((response) => {

this.isConnected = true;

//this.ping();

resolve(response);

});

wx.onSocketError(error => {

if (this.isConnected) {

this.fire('error', error);

} else {

reject(error);

}

});

wx.onSocketMessage(message => this._handleMessage(message));

wx.onSocketClose(result => {

if (this.isConnected) {

this.fire('error', new Error("The websocket was closed by server"));

} else {

this.fire('close');

}

this.isConnected = false;

this.destory();

});

wx.connectSocket({

url: `${url}/?EIO=3&transport=websocket`

});

});

}

ping() {

setTimeout(() => {

if (!this.isConnected) return;

wx.sendSocketMessage({

data: [packets.ping, 'probe'].join('')

});

}, PING_CHECK_INTERVAL);

}

close() {

return new Promise((resolve, reject) => {

if (this.isConnected) {

this.isConnected = false;

wx.onSocketClose(resolve);

wx.closeSocket();

} else {

reject(new Error('socket is not connected'));

}

});

}

emit(type, ...params) {

const data = [type, ...params];

wx.sendSocketMessage({

data: [packets.message, events.EVENT, JSON.stringify(data)].join("")

});

}

destory() {

this.removeAllListeners();

}

_handleMessage({ data }) {

const [match, packet, event, content] = /^(\d)(\d?)(.*)$/.exec(data);

if (+event === events.EVENT) {

switch (+packet) {

case packets.message:

let pack;

try {

pack = JSON.parse(content);

} catch (error) {

console.error('解析 ws 数据包失败:')

console.error(error);

}

const [type, ...params] = pack;

this.fire(type, ...params);

break;

}

}

else if (+packet == packets.pong) {

this.ping();

}

}

};

emitter.setup(WxSocketIO.prototype);

module.exports = WxSocketIO;

DEMO

项目附了一个微信小程序的DEMO 项目演示了接入 Scoket.IO 官方的演示聊天室,以便方便测试,关于详细用法还请参考官方文档。

How  to use

const opts = {}

const socket = this.globalData.socket = new WxSocketIO()

socket.connect('ws://chat.socket.io', opts)

.then(_ => {

console.info('App::WxSocketIO::onOpen')

console.info('App:onShow:', that.globalData)

})

.catch(err => {

console.error('App::WxSocketIO::onError', err)

})

其中socket.connect(ws_url, opts)中,opts目前可选值是path,用来指定使用socket.io时默认的path,比如设置opts为下列值:

{

query: 'fanweixiao',

with: 'mia&una',

}

完整实例地址:https://github.com/fanweixiao/wxapp-socket-io

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值