Nodejs 请问谁做过P2P客户端与客户端直接连接发送消息的?比如iwebpp.io

Nodejs 请问谁做过P2P客户端与客户端直接连接发送消息的?比如iwebpp.io

我安装iwebpp.io后 启动不了里面的demo原因是没有httpp但是这个东西 我不知道怎么搞。谁帮帮我?

6 回复

Node.js P2P 客户端与客户端直接连接发送消息

问题描述

你提到安装了 iwebpp.io 后无法启动其中的 demo,提示缺少 httpp。这可能是由于对依赖库的误解或版本不兼容导致的。iwebpp.io 可能是一个错误拼写或者特定的库名。如果你的目标是实现 P2P 客户端与客户端之间的直接通信,我们可以使用更通用的方法来实现这一点。

实现方法

我们可以使用 ws(WebSocket)库来创建一个简单的 P2P 通信系统。WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,非常适合用于实时应用。

以下是一个基本的示例,展示如何使用 WebSocket 在两个客户端之间直接发送消息:

  1. 安装依赖

    npm install ws
    
  2. 服务端代码

    const WebSocket = require('ws');
    
    // 创建一个 WebSocket 服务器
    const wss = new WebSocket.Server({ port: 8080 });
    
    wss.on('connection', function connection(ws) {
      console.log('New client connected!');
    
      ws.on('message', function incoming(message) {
        console.log('Received: %s', message);
        // 广播消息给所有连接的客户端
        wss.clients.forEach(function each(client) {
          if (client !== ws && client.readyState === WebSocket.OPEN) {
            client.send(message);
          }
        });
      });
    
      ws.on('close', function close() {
        console.log('Client disconnected');
      });
    });
    
  3. 客户端代码

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>P2P Client</title>
    </head>
    <body>
      <input type="text" id="messageInput" placeholder="Enter message">
      <button onclick="sendMessage()">Send</button>
      <div id="messages"></div>
    
      <script>
        const socket = new WebSocket('ws://localhost:8080');
    
        socket.onopen = () => {
          console.log('Connected to server');
        };
    
        socket.onmessage = (event) => {
          const messagesDiv = document.getElementById('messages');
          const messageElement = document.createElement('div');
          messageElement.textContent = event.data;
          messagesDiv.appendChild(messageElement);
        };
    
        function sendMessage() {
          const input = document.getElementById('messageInput');
          socket.send(input.value);
          input.value = '';
        }
    
        socket.onclose = () => {
          console.log('Disconnected from server');
        };
      </script>
    </body>
    </html>
    

解释

  • 服务端:创建一个 WebSocket 服务器,监听连接并处理消息。当收到消息时,广播给所有连接的客户端。
  • 客户端:通过 WebSocket 连接到服务器,并发送和接收消息。消息显示在一个简单的 HTML 页面中。

通过这种方式,你可以轻松地实现 P2P 通信,而无需依赖于特定的库如 iwebpp.io。希望这个示例对你有所帮助!


来个人聊聊啊。 C:\Users\Gary>npm install httpp-binary npm http GET https://registry.npmjs.org/httpp-binary npm http 304 https://registry.npmjs.org/httpp-binary npm WARN engine httpp-binary@0.0.2: wanted: {“node”:“0.8.x”} (current: {“node”:“ v0.10.22”,“npm”:“1.3.14”}) httpp-binary@0.0.2 node_modules\httpp-binary

C:\Users\Gary\node_modules\iwebpp.io\demos>node clntA.js

module.js:340 throw err; ^ Error: Cannot find module 'httpp’ at Function.Module._resolveFilename (module.js:338:15) at Function.Module._load (module.js:280:25) at Module.require (module.js:364:17) at require (module.js:380:17) at Object.<anonymous> (C:\Users\Gary\node_modules\iwebpp.io\lib\iwebpp.io.js :7:13) at Module._compile (module.js:456:26) at Object.Module._extensions…js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.require (module.js:364:17)

挺有意思,去研究下

这个项目挺有意思。

没人会吗?

根据你的问题描述,似乎你遇到了 iwebpp.io 框架中的问题,但描述中提到的 httpp 并不是一个标准的 Node.js 模块或术语。可能是表述上的误差。如果你想要实现 P2P(点对点)通信,特别是在 Node.js 环境中,可以使用一些现有的库来帮助完成这项任务。

这里以一个常见的 P2P 通信库 simple-peer 为例,它基于 WebRTC 实现,可以用于在浏览器和 Node.js 中进行 P2P 通信。下面是一个简单的示例,展示如何在两个 Node.js 客户端之间直接连接并发送消息。

示例代码

首先,确保你已经安装了 simple-peerws(WebSocket 服务器):

npm install simple-peer ws

然后创建一个名为 peerServer.js 的文件,作为 P2P 服务端:

const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', (ws, req) => {
    console.log(`New client connected!`);
    const peer = new SimplePeer({
        initiator: true,
        trickle: false,
    });

    ws.on('message', data => {
        console.log(`Received message from client: ${data}`);
        peer.signal(JSON.parse(data));
    });

    peer.on('signal', data => {
        ws.send(JSON.stringify(data));
    });

    peer.on('connect', () => {
        console.log('Connected!');
        // 发送消息
        peer.send("Hello!");
    });
});

接下来创建一个名为 peerClient.js 的文件,作为客户端:

const WebSocket = require('ws');
const SimplePeer = require('simple-peer');

const ws = new WebSocket('ws://localhost:8080');

ws.on('open', () => {
    const peer = new SimplePeer({
        initiator: false,
        trickle: false,
    });

    peer.on('signal', data => {
        ws.send(JSON.stringify(data));
    });

    peer.on('connect', () => {
        console.log('Connected to server!');
        // 接收消息
        peer.on('data', data => {
            console.log(`Message received from server: ${data}`);
        });
    });

    ws.on('message', data => {
        console.log(`Received signal from server: ${data}`);
        peer.signal(JSON.parse(data));
    });
});

解释

  1. 服务器端 (peerServer.js):启动一个 WebSocket 服务器,并在客户端连接时初始化一个 SimplePeer 实例。
  2. 客户端 (peerClient.js):连接到 WebSocket 服务器,并初始化另一个 SimplePeer 实例,用于与服务器建立 P2P 连接。
  3. 通过 peer.signal() 方法交换信号信息,以便在两个客户端之间建立连接。
  4. 成功连接后,可以通过 peer.send() 方法发送数据。

请注意,这只是一个基本示例,实际应用中可能需要处理更多细节,如错误处理、多客户端支持等。

回到顶部