Javascript Socket.io服务器在客户端重新加载/离开页面后崩溃

Javascript Socket.io服务器在客户端重新加载/离开页面后崩溃,javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我有一个奇怪的情况。我正在编写一个web应用程序,用于从ip摄像头流式传输rtsp。除了监视流重新加载或离开页面的客户端服务器崩溃(并非总是如此)外,一切都正常 以下是崩溃输出: zlib.js:499 var newReq = self._handle.write(flushFlag, ^ TypeError: Cannot read property 'write' of null at Zlib.call

我有一个奇怪的情况。我正在编写一个web应用程序,用于从ip摄像头流式传输rtsp。除了监视流重新加载或离开页面的客户端服务器崩溃(并非总是如此)外,一切都正常

以下是崩溃输出:

zlib.js:499
      var newReq = self._handle.write(flushFlag,
                                ^

TypeError: Cannot read property 'write' of null
    at Zlib.callback (zlib.js:499:33)  
const io = require('socket.io-client');
socket = io.connect(`http://${location.hostname}:8088/stream`);
socket.on('connect', function() {
   socket.emit('startStream', $this.$props.id);
});
socket.on('camfeed', function (data) {
   //Here the data is displayed on canvas
});
服务器端:

const app = require('express')();
const child_process = require('child_process');
const server = require('http').Server(app);
const io = require('socket.io')(server);
io.of('/stream').on('connection', function(socket) {
    let room;
    socket.on('startStream', function(camuid) {
        room = camuid;
        let stream;
        socket.join(room);

        if (processes.indexOf(camuid) == -1) {
            processes.push(camuid);
            logic.Onvif.getStreamLink(camuid).then(rtsp_link => {
                stream = child_process.spawn("ffmpeg", [
                    '-y',
                    '-re',
                    "-i", rtsp_link,
                    '-f', 'mjpeg',
                    '-'
                ], {
                    detached: false
                });

                stream.stdout.on('data', (data) => {
                    const frame = Object.values(new Uint8Array(data));
                    socket.nsp.to(room).emit('camfeed', frame);
                });

            }).catch((e) => {
                socket.nsp.to(room).emit('streamError', true);
            });
        }
    });
在客户端:

zlib.js:499
      var newReq = self._handle.write(flushFlag,
                                ^

TypeError: Cannot read property 'write' of null
    at Zlib.callback (zlib.js:499:33)  
const io = require('socket.io-client');
socket = io.connect(`http://${location.hostname}:8088/stream`);
socket.on('connect', function() {
   socket.emit('startStream', $this.$props.id);
});
socket.on('camfeed', function (data) {
   //Here the data is displayed on canvas
});
我试图找出服务器中的代码的哪一部分导致了这种行为,但到目前为止运气不佳

我尝试将函数、侦听器和发射器放入
try{}catch
console.log
中,查看每一步的停止位置,但输出并不总是相同的


因此,我开始寻找解决方案,并发现github存在一个问题,即zlib负责在发送数据之前将数据压缩到gzip,错误是由于试图处理不存在的数据造成的。另一方面,我没有将zlib作为依赖项安装,据我所知,zlib包不再使用,因为node内置了此功能。我搜索了
节点\u模块
,找到了minizlib包,但不知道该依赖项是谁的。

我认为您需要使用

  socket.on("disconnect",function(){
  //delete all user data here
  })

因此,它停止使用您创建的对象

我面临同样的问题。你有什么解决办法吗?有同样的问题吗?找到解决办法了吗?