Skip to content

Repository files navigation

OneSocket

我们的口号是“像使用axios和fetch 一样使用websocket”

OneSocket 是一个是用来实现单socket通信websocket工具,实现了顺序队列请求,每个请求可以有50ms(可配置)的间隔时间,并自带心跳请求。支持Promise调用,只要做一些简单的配置,可以像使用axios那样简单的使用socket请求了

以前我们写http请求是这样的

const xhr = new XMLHttpRequest()
xhr.onreadystatechange = function(){
if(xhr.readyState === 4) {
if(xhr.status === 200){
is ok
} else {
}
}
}
xhr.open('get, url, true)
xhr.send(data)

写起来很烦,逻辑也很感人。。

后来有了axios 我们发送请求时只要这样

axios.get('path').then((res) => {
console.log(res)
})

代码很少,工作很轻松,逻辑清晰,维护很简单

以前我们写socket

const socket = new WebSocket(src)
socket.addEventListener('open', function() {
socket.send(JSON.stringy({
service: 'connect',
data: '连上了'
}))
})
socket.addEventListener('close',function(){
})
socket.addEventListener('message', function(res) {
const data = JSON.parse(res.data)
if (data.result_data.service === 'connect') {
console.log('连上了')
} else if (data.result_data.service === 'state') {
}
})

写完这些我想打人,为什么要我承担这些。。

现在我们有了OneSocket

try{
const socket = await new OneSocket({
url: 'ws://192.168.69.60:8082/ws/home/overview'
})
} catch((err) => {
console.log(err)
})
socket.send('login', data).then((res) =>{
console.log(res)
})
socket.send('getList', data).then(() => {
})
socket.send('getUser', data).then(() => {
})
socket.on('notice', function() {
})
or
new OneSocket({
url: 'ws://192.168.69.60:8082/ws/home/overview'
}).then((ws) => {
ws.send('login', data).then(() => {
})
ws.send('getList', data).then(() => {
})
ws.send('getUser', data).then(() => {
})
ws.on('notice', function() {
})
})

这样我们就能有个非常清晰的业务逻辑,不论开发和维护过程中都将非常简单

配置项

字段名类型默认值描述
urlstringrequiredsocket请求地址
timeoutnumber默认10000socket请求时间
intervalnumber默认50ms每个请求的延迟时间
modestring
可选参数 vague模糊模式,使用service名定位回调,较为模糊,每个service可能对应多个回调
可选参数exact根据uuid定位回调,定位准确,每个uuid对应唯一回调
hasHeartbeatboolean是否存在心跳请求,默认true
heartbeatIntervalnumber10000心跳请求的间隔时间
heartbeatPackObjectJSONString 心跳请求数据
responseParserfunctionrequiredsocket请求返回数据解析函数

API

方法名功能参数
send发送数据无参数
close关闭请求无参数
updateConfig更新配置项Object: {heartbeatPack:{}}
on监听后端主动推送的消息参数:name,callback
remove移除用户监听的消息的一个回调,参数:name,callback
destroy销毁指定名称的所有监控回调,参数; name

TODO

Interceptors

  • request
  • response

Cancellation

About

像使用axios一样使用websocket

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages