weapp-socketio / weapp.socket.io

A WebSocket client for building WeChat Mini Program implement by socket.io
http://weappsocket.matong.io
MIT License
682 stars 172 forks source link

提一个非常实用的小建议:剔除socket.io-client依赖。 #111

Closed gooogirl closed 1 month ago

gooogirl commented 7 months ago

我阅读了此项目src下每个文件的每一行代码,得出一个简单的结论:

此项目入口文件只有一行代码:

module.exports = require('socket.io-client')

然后通过webpack配置,注入wx-ws.js

plugins: [
    new webpack.NormalModuleReplacementPlugin(/^ws$/g, process.cwd() + '/src/wx-ws.js'),
    new webpack.NormalModuleReplacementPlugin(/^.\/transports\/index$/g, process.cwd() + '/src/transport.js'),
  ],

也就是说,socket.io-client导进来,又导出去,期间并未做任何东西。

而这个项目真正起作用的地方是wx-ws.js,里面对window.WebSocket(来自socket.io-client,并非原生的WebSocket)进行了拦截.

那么此处是完全可以把socket.io-client剔除,只保留wx-ws.js+transport.js相关代码。

从而让用户自行决定socket.io-client的版本,只需要在执行socket.io-client之前,先执行wx-ws.js即可。

之所以给出以上建议,是因为我测试了2.0/2.0.1/2.1.0/2.2.0 版本,只能链接,无法见听到事件。而2.2.1版本,由于使用了socket.io-client版本大于2.x ,而服务器用的socket.io是2.x所以客户端的版本必须小于3.x, 所以这个项目因为引入socket.io-client的版本变化,从而导致其他不兼容问题。

目前我的做法是,克隆了此项目,然后删除index.js中的

module.exports = require('socket.io-client')

再重新编译打包,生成新的wxapp.socket.io.js 只有1kb。因此我命名为:wxapp.socket.io.pure.js

我在使用时,自行选择安装了socket.io-client@2.3.0 / 2.5.0 源码如下: index.html中加入:

<script src="xxx/xx/wxapp.socket.io.pure.js"></script>

代码中引入:

import io from 'socket.io-client'

const socket = io('ws://xx:3000', {
  path: '/socket',
  query: {
      Authorization: token
  }
})
gooogirl commented 7 months ago

关闭

gongzili456 commented 7 months ago

是否可以提个 PR 呢?