/FogConnect

提供企业级网络设备之间数据的快速,安全,可靠的P2P传输协议

Primary LanguageCGNU General Public License v3.0GPL-3.0

雾连接传输组件(FogConnect)

FogConnet 是用于P2P网络中连接、调度、传输等功能于一体的组件

架构图

fog connect 架构图

特性

  • 支持多种传输控制协议(UDP、QUIC、RTC、KCP、uTP、SCTP等)
  • 探测NAT类型,并收集和维护用于P2P连接的<IP:Port>列表
  • 支持双向 “打洞” 和高级端口预测
  • NAT类型最优匹配组合策略
  • 连接控制与物理距离最近原则
  • 所有网络信号采用事件机制处理
  • 对资源消耗极少(一般运行状态下内存占用3-5M,峰值不超过50M)
  • API简单、易懂,支持多种方式接入

快速开始

FogConnect depends on following packages:

Supported Environment

  • Linux(e.g. Ubuntu, OpenWrt), Windows, MacOS, Android, iOS

For example, on Ubuntu/LinuxMint

Prepare deps

Install common deps:

sudo apt-get install git make

Install dependencies:

sudo apt-get install openssl libssl-dev libwebsockets-dev libjansson-dev libevent-dev libglib2.0-dev
Build and run examples
make

性能测试

平均P2P建立连接时间:1.2~2秒

系统环境

Ubuntu 16.04.3 LTS
Intel(R) Core(TM) i5-7500 CPU @ 2.40 GHz
Mem: 7840 MB

Examples

Echo server

#include "fog_connect.h"

char CRLF[2] = "\r\n";

void on_connect(void *arg) {
}

void on_recv(void *arg) {
    fc_info *ud = (fc_info *)arg;
    size_t len = 0;
    char *msg = evbuffer_readln(ud->buff, &len, EVBUFFER_EOL_CRLF);
    if (msg != NULL) {
        fc_send(ud->pr_connect, msg, len);
        fc_send(ud->pr_connect, CRLF, sizeof(CRLF));
        printf("sending: %s\n", msg);
        fc_free(msg);
    }
}

void on_close(void *arg) {
}

int main() {
    fc_setup("**:**:**:**:**:1c");
    fc_set_callback(on_connect, on_recv, on_close);
    getchar();
    fc_exit();
    return 0;
}

Client

#include "fog_connect.h"

void on_connect(void *arg) {
    fc_info *ud = (fc_info *)arg;
    char *msg = strdup("hello\r\n");
    fc_send(ud->pr_connect, msg, strlen(msg));
    printf("sending: %s\n", msg);
    fc_free(msg);
}

void on_recv(void *arg) {
    fc_info *ud = (fc_info *)arg;
    size_t len = 0;
    char *msg = evbuffer_readln(ud->buff, &len, EVBUFFER_EOL_CRLF);
    if (msg != NULL) {
        printf("receiving: %s\n", msg);
        fc_free(msg);
        fc_disconnect(ud->pr_connect);
    }
}

void on_close(void *arg) {
}

int main() {
    fc_setup("**:**:**:**:**:2c");
    fc_connect_peer("**:**:**:**:**:1c", FOG_TRANSPORT_PROTOCOL_KCP, on_connect, on_recv, on_close);
    getchar();
    fc_exit();
    return 0;
}

开发者简介

  • 吴必磊(w@pear.hk)
    • 知名数据恢复软件AnyDataRecovery Pro作者、反汇编与破解专家(同时也是不知名的健身教练)
  • 万昌龙(d@pear.hk)
  • 陈柳州(66@pear.hk)