使用socket.io,socket.io-p2p,socket.io-p2p-server

问题描述:

自动配对对等连接我试图用WebSockets连接一个小游戏。我正在使用socket.io,socket.io-p2p和socket.io-p2p-server。我希望用户能够自动与任何没有合作伙伴的联网玩家配对。我希望用户只能成对连接。使用socket.io,socket.io-p2p,socket.io-p2p-server

到目前为止,只需遵循文档,我只能让客户端使用socket.io进行连接。当我尝试使用socket.io-P2P和socket.io-P2P服务器我有时会得到用户连接和其他时间我得到这样

在屏幕上的错误信息上socket 类型错误“缺少错误处理程序:无法读取属性“发射”的未定义”

有人开设了一个问题,对在回购这个问题,并没有得到回应,并一直没有得到回应

https://github.com/tomcartwrightuk/socket.io-p2p-server/issues/5

我不知道socket.io-p2p-server坏了,或者我只是错过了一些东西。自3月以来,更多的socket.io-p2p-server还没有被触及。

所以我的主要问题是:

  • 是socket.io-P2P服务器还活着吗?

  • 有没有更好的实现,我可以用这些抽象?

  • 会写我自己的逻辑,而不是使用socket.io-p2p-server值得吗?如预期

客户端代码

import P2P from 'socket.io-p2p' 
    import io from 'socket.io-client' 

    const socket = io() 
    const p2pSocket = new P2P(socket, null, function() { 
     console.log("my id is: " + p2pSocket.peerId) 
    }) 


    p2pSocket.on('peer-msg', function (data) { 
     console.log(data) 
    }) 

服务器端代码

var http = require('http') 
    var httpServer = http.createServer(requestHandler) 
    var fs = require('fs') 
    var io = require('socket.io')(httpServer) 
    var p2pServerModule = require('socket.io-p2p-server') 
    var p2p = p2pServerModule.Server 
    var connectedUsers = p2pServerModule.clients 
    io.use(p2p) 

    httpServer.listen(8000, 'localhost'); 

    function serveUpFile(req, res, path) { 
     fs.readFile(path.toString(), function (err, data) { 
     if (err) { 
      res.writeHead(500); 
      return res.end('Error loading index.html'); 
     } 

     res.writeHead(200) 
     res.end(data) 
     }) 
    } 

    function requestHandler (req, res) { 
     if (req.url === '/static/bundle.js') { 
     serveUpFile(req, res, './static/bundle.js') 
     } else { 
     serveUpFile(req, res, './index.html') 
     } 
    } 


    io.on('connection', function (client) { 
     console.log('client connected to the server') 

     client.on('peer-msg', function (data) { 
     console.log('Message from peer %s', data) 
     }) 

     client.on('disconnect', function() { 
     console.log('client disconnected from the server') 
     }) 
    }) 

socket.io-P2P服务器不会与socket.io 1.x的工作。

变化socket.io-P2P服务器/ index.js: 这一部分:

if (typeof room === 'object') { 
    var connectedClients = socket.adapter.rooms[room.name] 
} else { 
    var connectedClients = clients 
} 

要这样:

if (typeof room === 'object' && ('name' in room) && (room.name in socket.adapter.rooms)) { 
    var connectedClients = {} 
    for (var id in socket.adapter.rooms[room.name].sockets) { 
     connectedClients[id] = clients[id]; 
    } 
} else { 
    var connectedClients = clients; 
} 

该解决方案为我工作。