# @falseluffy/one-socket

> 像使用axios一样使用websocket

Latest version **0.1.0** (published 2021-12-30) · ISC license · 0 weekly downloads

## Install

```sh
npm install @falseluffy/one-socket
pnpm add @falseluffy/one-socket
yarn add @falseluffy/one-socket
bun add @falseluffy/one-socket
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.1.0 |
| Published | 2021-12-30 |
| First published | 2020-08-05 |
| Weekly downloads | 0 |
| License | ISC |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 19.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | falseLuffy |
| Maintainers | falseluffy |
| Keywords | websocket, Promise |

## Links

- npm: https://www.npmjs.com/package/@falseluffy/one-socket
- Repository: https://github.com/falseLuffy/OneSocket
- Homepage: https://github.com/falseLuffy/OneSocket#readme
- Issues: https://github.com/falseLuffy/OneSocket/issues
- npm.io page: https://npm.io/package/@falseluffy/one-socket

## Dependencies (1)

- [ws](https://npm.io/package/ws.md) ^7.3.1

## Alternatives

- [@opentelemetry/exporter-zipkin](https://npm.io/package/@opentelemetry/exporter-zipkin.md) — 14.8M weekly downloads
- [pusher-js](https://npm.io/package/pusher-js.md) — 2.0M weekly downloads
- [browserify](https://npm.io/package/browserify.md) — 1.7M weekly downloads
- [sqs-consumer](https://npm.io/package/sqs-consumer.md) — 1.7M weekly downloads
- [@sanity/eventsource](https://npm.io/package/@sanity/eventsource.md) — 930.8K weekly downloads

## Recent versions

- 0.1.0 (latest) — 2021-12-30
- 0.0.9 — 2021-12-21
- 0.0.8 — 2021-12-21
- 0.0.7 — 2021-12-21
- 0.0.6 — 2021-09-14
- 0.0.5 — 2021-09-04
- 0.0.1 — 2020-08-05

## README

# 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() {

    })
})

```
这样我们就能有个非常清晰的业务逻辑，不论开发和维护过程中都将非常简单



### 配置项
|字段名|类型|默认值|描述|
|-----------------|--------------|-------------|-----------------|
|url              |string|required     | socket请求地址 |
|timeout          |number|默认10000     | socket请求时间|
|interval         |number|默认50ms      | 每个请求的延迟时间|
|mode             |string|              |                  |
|                 |      |可选参数 vague|模糊模式，使用service名定位回调，较为模糊，每个service可能对应多个回调|
|                 |      |可选参数exact |根据uuid定位回调,定位准确，每个uuid对应唯一回调
|hasHeartbeat     |boolean|             |是否存在心跳请求，默认true
|heartbeatInterval|number|10000        |心跳请求的间隔时间
|heartbeatPack    |Object|             |JSONString 心跳请求数据
|responseParser   |function| required    |  socket请求返回数据解析函数


### API
|方法名|功能|参数|
|---|---|----|
| send | 发送数据 |无参数
| close|  关闭请求 |无参数
| updateConfig|  更新配置项| Object: {heartbeatPack:{}}
| on|  监听后端主动推送的消息 |参数：name,callback
| remove | 移除用户监听的消息的一个回调，| 参数：name,callback
| destroy |销毁指定名称的所有监控回调，|参数； name 


### TODO
Interceptors
  * request
  * response

Cancellation

---
_Source: https://npm.io/package/@falseluffy/one-socket · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
