Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript node.js服务器和socket.io客户端之间的文件传输挂起(但没有错误)_Javascript_Node.js_Socket.io - Fatal编程技术网

Javascript node.js服务器和socket.io客户端之间的文件传输挂起(但没有错误)

Javascript node.js服务器和socket.io客户端之间的文件传输挂起(但没有错误),javascript,node.js,socket.io,Javascript,Node.js,Socket.io,我想使用socket.io(socket.io client)和delivery传输node.js文件 我尝试在服务器端执行此操作: //// server.js var socket = require('socket.io').listen(5000); var dl = require('delivery'); var fs = require('fs'); socket.on('connect', function() { log( "Sockets connected"

我想使用socket.io(socket.io client)和delivery传输node.js文件

我尝试在服务器端执行此操作:

//// server.js
var socket  = require('socket.io').listen(5000);
var dl  = require('delivery');
var fs  = require('fs');
socket.on('connect', function() {
    log( "Sockets connected" );
    delivery = dl.listen(socket);
    delivery.connect();
    delivery.on('delivery.connect',function(delivery){
        delivery.send({
            name: 'file1.zip',
            path : './file1.zip'
        });
        delivery.on('send.success',function(file){
            console.log('File sent successfully!');
        });
    });
});
$ node server.js 
info  - socket.io started
debug - client authorized
info  - handshake authorized Bbzo928wAyTjDX8v06Ic
debug - setting request GET /socket.io/1/websocket/Bbzo928wAyTjDX8v06Ic
debug - set heartbeat interval for client Bbzo928wAyTjDX8v06Ic
debug - client authorized for 
debug - websocket writing 1::
debug - emitting heartbeat for client Bbzo928wAyTjDX8v06Ic
debug - websocket writing 2::
debug - set heartbeat timeout for client Bbzo928wAyTjDX8v06Ic
debug - got heartbeat packet
debug - cleared heartbeat timeout for client Bbzo928wAyTjDX8v06Ic
debug - set heartbeat interval for client Bbzo928wAyTjDX8v06Ic
在客户端:

//// client.js
var io  = require('socket.io-client');
var dl  = require('delivery');
var fs  = require('fs');
var socket = io.connect('http://localhost:5000');
socket.on('connection', function(socket){
    var delivery = dl.listen(socket);
    delivery.on('receive.success',function(file){
        fs.writeFile(file.name, file.buffer, function(err) {
            if(err) {
                console.log('File could not be saved: ' + err);
            } else {
                console.log('File ' + file.name + " saved");
            };
        });
    });
});
在执行时,没有错误,但它挂起。 服务器端:

//// server.js
var socket  = require('socket.io').listen(5000);
var dl  = require('delivery');
var fs  = require('fs');
socket.on('connect', function() {
    log( "Sockets connected" );
    delivery = dl.listen(socket);
    delivery.connect();
    delivery.on('delivery.connect',function(delivery){
        delivery.send({
            name: 'file1.zip',
            path : './file1.zip'
        });
        delivery.on('send.success',function(file){
            console.log('File sent successfully!');
        });
    });
});
$ node server.js 
info  - socket.io started
debug - client authorized
info  - handshake authorized Bbzo928wAyTjDX8v06Ic
debug - setting request GET /socket.io/1/websocket/Bbzo928wAyTjDX8v06Ic
debug - set heartbeat interval for client Bbzo928wAyTjDX8v06Ic
debug - client authorized for 
debug - websocket writing 1::
debug - emitting heartbeat for client Bbzo928wAyTjDX8v06Ic
debug - websocket writing 2::
debug - set heartbeat timeout for client Bbzo928wAyTjDX8v06Ic
debug - got heartbeat packet
debug - cleared heartbeat timeout for client Bbzo928wAyTjDX8v06Ic
debug - set heartbeat interval for client Bbzo928wAyTjDX8v06Ic
在客户端没有输出:

$ node client.js

有人知道出了什么问题吗?

首先,NPM存储库中的
交付
版本已经过时,并且包含一些bug。您应该从GitHub安装最新版本:

$ npm install git+https://github.com/liamks/Delivery.js.git
接下来,您将混合一些客户端和服务器部分,特别是每个部分都必须处理的事件。这(有些,见下文)对我很有用:

//// server.js
var io = require('socket.io').listen(5000);
var dl = require('delivery');
var fs = require('fs');

io.sockets.on('connection', function(socket) {
  console.log('server: a new client connected');
  var delivery = dl.listen(socket);
  delivery.on('delivery.connect', function(delivery) {
    delivery.send({
      name: 'file1.zip',
      path : './file1.zip'
    });
    delivery.on('send.success', function(file) {
      console.log('File sent successfully!');
    });
  });
});

//// client.js
var io = require('socket.io-client');
var dl = require('delivery');
var fs = require('fs');
var socket = io.connect('http://localhost:5000');

socket.on('connect', function() {
  console.log('client: connected to server');
  var delivery = dl.listen(socket);
  delivery.connect();
  delivery.on('receive.success', function(file) {
    // TODO: fs.writeFile(...);
  });
});

但是,
receive.success
事件似乎已经向客户端发送了两次,至少对我来说是这样。我不知道为什么(我不太熟悉
交付
)。

我不确定你可以通过这样的套接字发送一个二进制文件,为什么你要在客户端使用node.js requires和语法?@adeneo客户端不是一个浏览器,而是另一个节点应用程序,并且正在运行used@robertklep-这就解释了,我也这么想,但它只是说“客户端”。从未使用过该模块,只是用于发送这样的文件。我遇到了相同的问题,receive.success被击中两次!