小编Vad*_*Vad的帖子

Node.js Redis连接池

当使用带有Redis的node_redis Node.js模块时,我应该只使用一个连接,因为Redis是单线程进程,还是我应该创建一个连接池来提高性能?

connection-pooling redis node.js

21
推荐指数
2
解决办法
7764
查看次数

Node.js:捕获`child_process.spawn`的STDOUT

我需要捕获生成的子进程的自定义输出.

child_process.spawn(command[, args][, options])
Run Code Online (Sandbox Code Playgroud)

例如,

var s = fs.createWriteStream('/tmp/test.txt');
child_process.spawn('ifconfig', [], {stdio: [null, s, null]})
Run Code Online (Sandbox Code Playgroud)

现在我如何/tmp/test.txt实时阅读?

它看起来像child_process.spawn没有使用stream.Writable.prototype.write,也没有stream.Writable.prototype._write为它的执行.

例如,

s.write = function() { console.log("this will never get printed"); };
Run Code Online (Sandbox Code Playgroud)

以及,

s.__proto__._write = function() { console.log("this will never get printed"); };
Run Code Online (Sandbox Code Playgroud)

看起来它使用引擎盖下的文件描述符来写入child_process.spawn文件.

这样做不起作用:

var s2 = fs.createReadStream('/tmp/test.txt');
s2.on("data", function() { console.log("this will never get printed either"); });
Run Code Online (Sandbox Code Playgroud)

那么,我怎样才能获得STDOUT子进程的内容?

我想要实现的是将STDOUT子进程流转换为套接字.如果我将套接字直接提供child_process.spawnstdio参数作为参数,它会在套接字完成后关闭套接字,但我想保持套接字打开.

更新: …

javascript stream node.js

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

mmap Mac:分段错误

我的Mac上的以下内容成功:

int main() {
    int* addr = (int*) mmap(0, 100, 1 | 2, 2 | 4096, -1, 0);

    *addr = 25;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是下面的代码是相同的,但是当我尝试*addr使用分段错误写入时失败:

int main() {
    int* addr = (int*) syscall(SYS_mmap, 0, 100, 1 | 2, 2 | 4096, -1, 0);

    *addr = 25;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

syscall成功返回一个内存地址,但当我尝试写入它时失败.

我这样编译:

g++ ./c++/mmap.cc -o ./mmap && ./mmap
Run Code Online (Sandbox Code Playgroud)

如果我运行两个版本dtruss:

g++ ./c++/mmap.cc -o ./mmap && sudo dtruss ./mmap
Run Code Online (Sandbox Code Playgroud)

然后两个版本都成功了,我看到两个版本的相同mmap调用:

mmap(0x0, 0x64, 0x3, 0x1002, 0xFFFFFFFF, …
Run Code Online (Sandbox Code Playgroud)

c c++ system-calls

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

重定向后的Nginx反向代理

我希望Nginx返回实际文件而不是使用Location:重定向标头响应.我使用Nginx作为反向代理缓存:cdn.mydomain.com接收请求和联系人api.mydomain.com/files/从那里获取图像文件,但api.mydomain.com/files/返回带有Location:重定向头的空白响应到AWS S3,而不是文件本身.

因此,Nginx缓存空白重定向响应.如何让Nginx从S3获取和缓存实际文件.

user www-data;
worker_processes 4;
pid /var/run/nginx.pid;

http {
    server_names_hash_bucket_size 64;
    proxy_redirect off;

    proxy_cache_path /var/cache/nginx levels=2:2:2 keys_zone=my-cache:8m max_size=4G inactive=600m;
    proxy_temp_path /var/cache/tmp;

    server {
        listen 80;
        server_name cdn.mydomain.com;
        server_tokens off;
        location / {
            proxy_pass http://api.mydomain.com/files/;

            proxy_cache my-cache;
            proxy_cache_valid 200 302 30d;
            expires 30d;
            add_header Pragma public;
            add_header Cache-Control "public";
        }
}
Run Code Online (Sandbox Code Playgroud)

proxy nginx amazon-s3

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

Firebase存储允许删除文件

我对用户帖子图片上传有以下规则,但是当前规则不允许删除文件.

如何修改规则以允许用户删除他的图片?

request变量上的哪个属性表示请求是DELETE

  match /{uid}/posts/{pid}/{imageName} {
    allow read;
    allow write: if (uid == request.auth.uid)
        && ((
            ((imageName == "pic.jpg") || (imageName == "pic.png") || (imageName == "pic.gif"))
            && (request.resource.size < 5 * 1024 * 1024)
            && (request.resource.contentType.matches('image/.*')) 
      ));
  }
Run Code Online (Sandbox Code Playgroud)

有这样的事吗?:

request.method == "DELETE"
Run Code Online (Sandbox Code Playgroud)

我在文档中找不到任何内容.

delete-file firebase firebase-storage

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

Mac 64 位系统调用

如何在 Mac 上用 C++执行64 位 syscall

我需要以下内容才能工作:

#include <unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>

int main() {
  long* addr = (long*) syscall(SYS_mmap, 0, 100, 1 | 2, 2 | 4096, -1, 0);
}
Run Code Online (Sandbox Code Playgroud)

问题是addr下面应该是 64 位,因为它是一个指针,但它会将结果截断为 32 位值。

我编译:

g++ ./mmap.cc -o ./mmap 
Run Code Online (Sandbox Code Playgroud)

PS我知道存在mmap函数,以上只是一个例子,我需要让syscall函数起作用。

PPS 问题是在 64 位系统上syscall应该返回 64 位值,但在 Mac 中unistd.h它被定义为int

int  syscall(int, ...);
Run Code Online (Sandbox Code Playgroud)

这是一个错误吗?该mmap系统调用返回正确void*

void *  mmap(void *, size_t, int, int, …
Run Code Online (Sandbox Code Playgroud)

c++ macos system-calls

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

JSON到XML的转换

将JSON转换为XML并返回的最佳方法是什么?例如,下面的JSON

{
    "user": "gerry",
    "likes": [1, 2, 4],
    "followers": [
        {
            "name": "megan"
        },
        {
            "name": "pupkin"
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

可以像这样转换成XML(#1):

<?xml version="1.0" encoding="UTF-8" ?>
<user>gerry</user>
<likes>1</likes>
<likes>2</likes>
<likes>4</likes>
<followers>
    <name>megan</name>
</followers>
<followers>
    <name>pupkin</name>
</followers>
Run Code Online (Sandbox Code Playgroud)

或者像这样(#2):

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <likes>
      <element>1</element>
      <element>2</element>
      <element>4</element>
   </likes>
   <followers>
      <element>
         <name>megan</name>
      </element>
      <element>
         <name>pupkin</name>
      </element>
   </followers>
   <user>gerry</user>
</root>
Run Code Online (Sandbox Code Playgroud)

特别是,转换阵列会产生差异.对象属性转换非常简单.我也确定还有其他方法可以将JSON转换为XML.

所以问题是:最好的方法是什么?有标准吗?

另一个问题是:有没有办法以某种数学形式表达转换映射本身.例如,是否可以描述映射,以便在给定JSON对象和映射对象时转换函数将准确知道要生成哪个XML.并且反过来.

XML_1 = convert(JSON, mapping_1)
XML_2 = convert(JSON, mapping_2)
JSON  = convert(XML_1, mapping_1)
JSON  = convert(XML_2, mapping_2)
JSON  = convert(XML_1, mapping_2) # Error!
Run Code Online (Sandbox Code Playgroud)

xml mapping json

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