Javascript node.js服务器和socket.io客户端之间的文件传输挂起(但没有错误)
我想使用socket.io(socket.io client)和delivery传输node.js文件 我尝试在服务器端执行此操作: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"
//// 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被击中两次!