2017-09-14 62 views
0

我设法通过让控制台为每个新连接的对等体打印出“您是对等体编号n”来获得我的控制台日志中连接的对等体的数量。 有没有办法添加每个连接的同行的ID? 我是相对较新的socket.io,我似乎无法找到办法做到这一点。如何获取连接对等的ID?

这是我server.js文件:

var app = require("express")(); 
var express = require("express"); 
var server = require("http").Server(app); 
var p2pserver = require("socket.io-p2p-server").Server; 
var io = require("socket.io")(server); 
var ss = require("socket.io-stream"); 
var path = require("path"); 

app.use(express.static(__dirname)); 
io.use(p2pserver); 

var peerNum = 0; 

io.on("connection", function(socket) { 

    console.log("Peer " + peerNum + " connected"); 
    io.emit("peer-num", peerNum); 
    peerNum++; 

    ss(socket).on("file", function(stream, data) { 

    var filename = path.basename(data.name); 

    var parts = []; 

    stream.on("data", function(data) { 
     parts.push(data); 
    }); 

    stream.on("end", function() { 
     socket.broadcast.emit("file", parts); 
    }); 

    }); 
}); 

server.listen(8080, function() { 
    console.log("Listening on 8080") 
}); 

这是我client.js文件:

// Browserified 
var P2P = require("socket.io-p2p"); 
var io = require("socket.io-client"); 
var ss = require("socket.io-stream"); 
var socket = io(); 
var opts = {autoUpgrade: true, peerOpts: {numClients: 10}}; 
var p2p = new P2P(socket, opts); 
var $ = require("jquery"); 

p2p.on("peer-num", function(num) { 
    console.log("You are peer number " + num); 
    $(".peerNum").html("Number " + num); 
}); 

p2p.on("file", function(stream) { 
    console.log(stream); 

    var img = document.createElement("img"); 
    img.src = (window.URL || window.webkitURL).createObjectURL(new Blob(stream)); 
    document.getElementById("receivedImages").appendChild(img); 
}); 

$(function() { 
    $("#file").change(function(e) { 
    ss.forceBase64 = true; 
    var file = e.target.files[0]; 
    var stream = ss.createStream(); 

    ss(socket).emit("file", stream, {size: file.size,name:file.name}); 
    var blobStream = ss.createBlobReadStream(file); 
    var size = 0; 
    blobStream.on("data", function(chunk) { 
     size += chunk.length; 
     console.log(Math.floor(size/file.size * 100) + "%"); 
    }); 
    blobStream.pipe(stream); 
    }); 
}); 

回答

0

如果你的ID的意思是说socket.io分配给内部ID一个连接(在服务器上),那么你可以通过socket.id访问它。所以,如果你想只使用socket.id,而不是你peerNum,变量,那么你会改变这一点:

io.emit("peer-num", peerNum); 

这样:

io.emit("peer-num", socket.id); 

socket.id值仅在服务器上使用。它并不是一个人类可读的名字(它包含随机生成的字符),但它可以用来引用任何给定的连接。由于它是一个字符串,因此可以很容易地将其发送给其他客户端,这些客户端可以在将消息发送回服务器以引用特定客户端连接时使用它。

+0

这样做。 谢谢。 –