小编JSO*_*SON的帖子

向Kademlia添加新节点,构建Kademlia路由表

我不能完全围绕Kademlia DHT的加入过程.我在网上看过一些教程和演示文稿,但它们似乎都以相同的方式说出来,并且所有psedo代码等在大多数情况下都是相同的(实际复制/粘贴).

有人可以高度重视这个吗?

p2p dht kademlia

6
推荐指数
1
解决办法
1702
查看次数

PHP FFI - 将 Rust 函数的数组返回给 PHP

我需要从 Rust 函数返回几个值。试图声明返回数组的函数

$ffi = FFI::cdef('float get_arr()[2];', './target/release/libphp_rust.dylib');

$array = $ffi->get_arr();
Run Code Online (Sandbox Code Playgroud)

但出现错误: PHP Fatal error: Uncaught FFI\ParserException: function returning array is not allowed at line 1 in /array.php:3

PHP FFI 似乎无法直接使用数组。所以我找到了另一个解决方案。我从 PHP 创建了 C 数组,然后将指向它的指针传递给 Rust 代码,然后用 Rust 函数填充它:

$ffi = FFI::cdef('bool get_arr(float (*res)[2]);', './target/release/libphp_rust.dylib');

$array = $ffi->new('float[2]');

$result = $ffi->get_arr(FFI::addr($array));

if ($result) {
    var_dump($array);
} else {
    //... something went wrong
}
Run Code Online (Sandbox Code Playgroud)
#[no_mangle]
pub extern fn get_arr(array_pointer: *mut [f32;2]) -> bool {
    let res = unsafe {
        assert!(!array_pointer.is_null());
        &mut …
Run Code Online (Sandbox Code Playgroud)

php ffi rust php-ffi

5
推荐指数
1
解决办法
665
查看次数

转发 WebRTC 视频以进行点对点广播

对等点必须能够转发数据,以便在点对点覆盖(例如 Chord)中进行广播。当每个节点(对等点)接收到数据时,它会将数据转发到其路由表中的所有其他节点,然后这些节点将再次转发相同的数据,直到环中的所有节点都收到数据。例如,结构化 p2p WebRTC 广播需要一种转发 WebRTC 视频流的方法。

据我了解,javascript WebRTC API 旨在允许开发人员设置连接,但不能直接处理媒体流。将高级视频对象“插入”到连接对象中以使用视频流,而无需对视频数据进行较低级别的访问。

问题

  1. 有没有办法在 WebRTC 客户端中访问原始视频流?
  2. WebRTC 中是否存在任何形式的原始消费者对象或转发/中继对象?

html p2p chord html5-video webrtc

3
推荐指数
1
解决办法
4853
查看次数

Boost线程中的内存泄漏?

我正在尝试增强线程,并且从valgrind中注意到,它只是通过循环一个空的代码块而泄漏了320个字节。我从2010年开始在google上发现了一些帖子,表明它们很可能是虚假肯定,因为在valgind运行之前未关闭线程,但这有点不同。在这些示例中,您仍有一些仍可访问的块(因此,如果线程仍在运行,则可释放),其中我的运行显示8个仍可访问,而20个已确定丢失。这是我应该担心的事情,还是我不知所措?谢谢

代码

#include <boost/thread.hpp>
#include <iostream>
#define THREADS 20

void threadfunc(int workerid) {}

int main(int argc, char **argv){

    boost::thread *threads[THREADS];
    int i;
    for (i = 0; i < THREADS; i++) {
        threads[i] = new boost::thread(threadfunc, i);
    }
    for (i = 0; i < THREADS; i++) {
        threads[i]->join();
    }
}
Run Code Online (Sandbox Code Playgroud)

编译命令

 c++ -o example example.cpp -I /usr/include/boost -lboost_system -lboost_thread
Run Code Online (Sandbox Code Playgroud)

预设命令

 G_SLICE=always-malloc G_DEBUG=gc-friendly  valgrind -v --tool=memcheck --leak-check=full --show-reachable=yes --num-callers=40 --log-file=valgrind.log ./example
Run Code Online (Sandbox Code Playgroud)

精氨酸结果

==31674== HEAP SUMMARY:
==31674==     in use at exit: 328 bytes …
Run Code Online (Sandbox Code Playgroud)

c++ boost valgrind memory-leaks

1
推荐指数
1
解决办法
2053
查看次数

使用pselect捕获套接字和信号事件

我正在制作一个需要同时使用socket io和共享内存的消息服务.无论输入来自何处,例程都是相同的,唯一的区别是本地消息将通过套接字通过共享内存和非本地消息传递.这两个事件都必须取消阻止相同的pselect调用.在这一点上,我认为最好的选择可能是在将消息写入共享内存时发送信号并使用它来中断pselect调用,但我不确定如何做到这一点,或者即使它是最佳路由.

我不习惯使用信号.什么是实现这一目标的最佳方法?

c c++ sockets linux

0
推荐指数
1
解决办法
565
查看次数

如何在AVR 8位上进行内联汇编?

我知道这很接近于"愚蠢问题"类别,但我一直在研究如何在AVR 8-bit上启动加载后执行机器代码,并且已经了解到AVR 8上使用的哈佛架构 - 位MCU使得无法从闪存以外的任何地方执行代码.那么如何使用内联asm在运行时引入新的可执行代码呢?

microcontroller assembly avr avr-gcc harvard-architecture

0
推荐指数
1
解决办法
161
查看次数