小编fre*_*ish的帖子

在线Node.js服务器

Node.js是否足够成熟,可以在其中创建整个Web应用程序?我完全是在Node.js.我在某地读过,因为某些原因应该有(例如)Node.js后面的nginx.这是真的吗?Node.js不能独立存在吗?是否有基于Node.js构建的在线网站?

javascript node.js

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

使用 sockaddr 安全 reinterpret_cast?

假设我正在做一些套接字编程:

struct sockaddr_in sa;
inet_pton(AF_INET, "127.0.0.1", &(sa.sin_addr));
auto *resa = reinterpret_cast<struct sockaddr*>(&sa);
bind(sfd, resa, sizeof(sa));
Run Code Online (Sandbox Code Playgroud)

现在的问题是:我们这样做了reinterpret_cast(或者(struct sockaddr *)像教程或 man 中的C 风格类型转换)但是标准并不能保证它可以工作,对吧?另一方面,似乎没有办法以不同的方式做到这一点,bind()需要struct sockaddr*(并且它必须访问底层结构以确定它收到了什么)。

那么reinterpret_cast在这种情况下在不同类型之间进行操作是否安全?如果是,那为什么?

c++ type-safety undefined-behavior reinterpret-cast

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

Express JS反向URL路由(Django样式)

我正在使用Express JS,我想要一个类似于Django reverse功能的功能.所以,如果我有一条路线,例如

app.get('/users/:id/:name', function(req, res) { /* some code */ } )
Run Code Online (Sandbox Code Playgroud)

我想用一个函数作为例子

reverse('/users/:id/:name', 15, 'John');
Run Code Online (Sandbox Code Playgroud)

甚至更好

reverse('/users/:id/:name', { id : 15, name : 'John' });
Run Code Online (Sandbox Code Playgroud)

这将给我的网址/users/15/John.这样的功能存在吗?如果没有,那么你有任何想法如何编写这样的功能(考虑到Express的路由算法)?

routing node.js express

5
推荐指数
2
解决办法
4038
查看次数

Python 中的 WebSocket 帧解码

我尝试在服务器端实现WebSocket帧解密算法(基于此:How can I send and receive WebSocket messages on the server side? )。这是我所得到的:

def decode(data):
    frame = bytearray(data)

    length = frame[1] & 127

    indexFirstMask = 2
    if length == 126:
        indexFirstMask = 4
    elif length == 127:
        indexFirstMask = 10

    indexFirstDataByte = indexFirstMask + 4
    mask = frame[indexFirstMask:indexFirstDataByte]

    i = indexFirstDataByte
    j = 0
    decoded = []
    while i < len(frame):
        decoded.append(frame[i] ^ mask[j%4])
        i += 1
        j += 1

    print decoded

    return "".join(chr(byte) for byte in decoded) …
Run Code Online (Sandbox Code Playgroud)

python decode mask websocket

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

使用jquery-ajax执行curl命令

我使用以下输入执行curl命令到mongoDB.

curl --data 'cmd={"geoNear" : "items", "near":[6.8590845,79.9800719]}' 'http://72.123.xxx.xxx:27080/weather/_cmd'
Run Code Online (Sandbox Code Playgroud)

我想用jsonp或json执行它并获得响应.我在jsonp请求下面尝试过.

var url =  "http://72.123.xxx.xxx:27080/weather/_cmd";
$.getJSON(url + "?callback=?",
    {
        cmd:{"geoNear" : "items", "near": 6.8590845,79.9800719]}
    },
    function(tweets) { }
);
Run Code Online (Sandbox Code Playgroud)

我从控制台得到了什么.请帮我解决一下这个.谢谢.

jquery json curl jsonp

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

将有向图编码为数字

假设我有一个有向图,具有单根且没有循环。我想在每个节点上添加一个具有以下属性的类型(例如作为具有某些自定义排序的整数):

if Node1.type <= Node2.type then there exists a path from Node1 to Node2
Run Code Online (Sandbox Code Playgroud)

请注意,拓扑排序实际上满足反转性质:

if there exists a path from Node1 to Node2 then Node1.type <= Node2.type
Run Code Online (Sandbox Code Playgroud)

所以不能在这里使用。

现在请注意,这里不能使用具有自然排序的整数,因为每 2 个整数都可以进行比较,即整数的排序是线性的,而树不必是线性的。

这是一个例子。假设该图有 4 个节点A, B, C, D和 4 个箭头:

A->B, A->C, B->D, C->D
Run Code Online (Sandbox Code Playgroud)

所以它是一颗钻石。现在我们可以把

A.type = 00
B.type = 01
C.type = 10
D.type = 11
Run Code Online (Sandbox Code Playgroud)

右侧有二进制格式的整数。比较按位定义:

(X <= Y) if and only if (n-th bit of X <= n-th bit of Y for all n)
Run Code Online (Sandbox Code Playgroud)

所以我想可以使用这样的排序,问题是如何从给定的图中构造值?我什至不确定解决方案是否始终存在。有什么提示吗? …

algorithm directed-acyclic-graphs

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

Libev:如何安排尽快调用回调

我正在学习 libev 并且偶然发现了这个问题。假设我想尽快处理某些事情,但不是现在(即不在当前执行函数中)。例如,我想将一些大型同步作业分成多个部分,这些部分将排队,以便其他回调可以在两者之间触发。换句话说,我想用 timeout 安排一个回调0

所以第一个想法是ev_timer与 timeout一起使用0。第一个问题是:这样有效吗?libev 是否​​能够将0超时计时器转换为有效的“尽快调用”工作?我认为不是。

我一直在挖掘libev 的文档,我也发现了其他选项:

它可以通过使用准备或空闲观察者人为地延迟调用回调

所以空闲的观察者在这里可能不会很好,因为

当没有其他相同或更高优先级的事件待处理时,空闲观察者会触发事件

这可能不是我想要的。准备观察者可能会在这里工作。但是为什么不检查观察者呢?我所说的上下文有什么重大区别吗?

这些文档建议的另一个选项是:

或者更偷偷地,通过重用现有的(停止的)观察者并将其推入待处理队列:

ev_set_cb (watcher, callback);
ev_feed_event (EV_A_ watcher, 0);
Run Code Online (Sandbox Code Playgroud)

但这需要始终有一个停止的观察者。此外,由于我事先不知道我想同时安排多少个电话,所以我必须有多个观察者,并另外通过某种列表跟踪它们,并在需要时增加它。

那么我在正确的轨道上吗?这些都是可能性还是我错过了一些简单的东西?

c timeout libev

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

如何通过id获取线程对象?

让我们说一些线程有std::thread::id myId一些其他线程.现在我想要检索std::thread与之关联的对象,myId以便我可以.join().有可能std吗?或者我必须手动跟踪它?

c++ std c++11 stdthread

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

查找列表中连续数字之间的差异(Python)

给定一个数字列表,我试图编写一个代码,找出连续元素之间的差异.例如,A = [1, 10, 100, 50, 40]函数的输出应该是[0, 9, 90, 50, 10].这是我到目前为止尝试使用递归的内容:

def deviation(A):
    if len(A) < 2:
        return
    else:
        return [abs(A[0]-A[1])] + [deviation(A[1: ])]
Run Code Online (Sandbox Code Playgroud)

然而,我得到的输出(使用上面的A作为输入的例子)是[9, [90, [50, [10, None]]]].如何正确格式化括号?(我已经尝试过猜测和检查,但我这是我得到的最接近的)我怎么写它从前一个元素中减去当前元素而不会得到第一个元素的索引错误?我仍然希望输出列表的第一个元素为零,但我不知道如何使用递归来解决这个问题,并且由于某种原因,这似乎是我的最佳途径.

python recursion deviation

4
推荐指数
3
解决办法
4148
查看次数

std::atomic_flag 和 std::lock_guard

由于std::lock_guard不适用于std::atomic_flag我已经实现了我自己的版本:

class atomic_guard {
public:
    inline atomic_guard(std::atomic_flag& lock) : lock(lock) {
        while (this->lock.test_and_set()) {
            /* spin */ 
        };
    };

    inline ~atomic_guard() {
        this->lock.clear();
    };

private:
    std::atomic_flag& lock;
};
Run Code Online (Sandbox Code Playgroud)

这似乎工作正常。问题是:这是实施 RAII 的正确方法吗std::atomic_flag?还有一个内置的保护吗?如果没有,为什么?专业化std::lock_guard<std::atomic_flag>看起来很自然。

locking atomic c++11

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