小编muf*_*fel的帖子

在Node.js HTTP Server上重用TCP连接

我正在使用http.Server默认http模块的对象( - > API).

如果客户端连接,request则由服务器发出事件,并将http.ServerRequest对象传递给事件处理程序.该请求对象发出以下三个事件:

  • 数据(传入数据)
  • 结束(请求已结束)
  • 关闭(连接关闭)

我想保留客户端的初始(TCP)连接,并将其重用于多个请求.客户端在发送"Connection:keep-alive"标头时支持此行为.

但是如何使用node.js实现这一点呢?我的问题是在第一次请求之后发出了结束事件,就像官方API所说的那样:

每个请求只发出一次.之后,将不再在请求上发出"数据"事件.

好的,我无法使用该请求.但有没有办法处理相同的TCP连接并在其上创建新请求?

背景:我正在研究代理实现.如果用户访问使用NTLM的网站,我必须至少为这种类型的身份验证所需的三个客户端请求坚持一个连接,以免遇到问题.

你知道我会尝试什么吗?

提前致谢!

proxy http keep-alive node.js

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

用于本地(非远程)命令执行的ssh隧道

我想创建一个Linux shell(bash-)脚本,它创建一个SSH隧道,运行一个使用该隧道的本地命令,最后关闭隧道和周围的SSH连接.

为了减少解释难度,可以考虑一个名为"remoteserver"的主机的本地SSH配置,其中包含一个没有密码的本地私钥,所以

ssh remoteserver -L 4444:targetserver:5555

将直接打开与远程服务器的连接,并创建从本地端口4444到目标服务器的隧道.并考虑本地命令是什么localclient --port 4444,脚本看起来如何打开隧道,执行本地命令并在本地客户端应用程序完成后关闭隧道?

由于应该可以保持其他并行正在进行的SSH连接,我不想要类似的东西sudo killall ssh.

linux ssh bash shell

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

C++ Lambda:lambda中的访问静态方法导致错误'这个lambda函数没有捕获这个'

请考虑以下代码:

//this is what I want to call; I cannot modify its signature
void some_library_method(void(*fp)(void));

class Singleton{
    public:
        static Singleton *instance();
        void foo();
        void bar();
    private:
        Singleton();
};

void Singleton::foo(){
    //this leads to an error ('this' was not captured for this lambda function)
    void(*func_pointer)(void) = []{
        Singleton::instance()->bar();
    };
    some_library_method(func_pointer);
}
Run Code Online (Sandbox Code Playgroud)

我想调用一个我无法修改的函数(见some_library_method上文),它希望函数指针作为参数.调用应该在类成员中完成foo().我知道我无法访问那里的类成员,但我想要做的就是以静态方式访问Class Singleton(检索单例实例).

有什么办法改革的lambda表达式显示目标的编译器,G ++ V4.7.2,它实际上并没有需要参考this

c++ lambda gcc c++11

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

node.js 和express:路由器内部请求的内部重定向

我正在使用当前的express 4和node.js 6.x。在我的 Web 应用程序中,我需要执行内部重定向(即从一个路由处理程序重定向到另一个路由处理程序,而不向客户端发送重定向)。这在顶级 Express 或同一路由器内有效,但如果源请求位于路由器中则无效。

请参阅以下最小工作示例:

const express = require("express");
const app = module.exports.app = express();
const router = new express.Router();

app.use("/myrouter", router);

// not working
router.get("/test", (req, res, next) => {
  req.url = "/toplevel";
  next();
});

// working
app.get("/test", (req, res, next) => {
    req.url = "/toplevel";
    next();
});

// debug output
app.use((req, res, next) => {
  console.log(`request to ${req.url}`);
  next();
});

app.get("/toplevel", (req, res) => {
  res.end("toplevel");
});

app.listen(8000);
Run Code Online (Sandbox Code Playgroud)

如果我打开“ http://localhost:8000/test ”,我会得到正确的输出“toplevel”,并且调试输出会打印“request to /toplevel”。不幸的是,它不适用于“ http://localhost:8000/myrouter/test ”。调试输出打印“request …

javascript node.js express

5
推荐指数
0
解决办法
1688
查看次数

访问先前运行的同一作业的工件

我想使用 Gitlab CI/CD 进行部署。相同的代码库用于部署到不同的环境,并且需要一个statefile(环境状态)进行部署,需要在部署后更新,并在部署前获取。由于它是一条关键信息,我希望它成为构建工件。

考虑我的部署管道和不同的作业deploy-env1deploy-env2. 是否有可能以某种方式定义工作

  • 将文件添加state.dat为构建工件(易于使用该artifacts选项)
  • 从最新版本的状态文件开始(上次在当前分支上成功运行相同的作业)
  • 如果之前没有成功运行,则从一个空文件开始

由于目前我似乎无法将作业配置为依赖于自身,您知道是否有办法实现这一点吗?

gitlab gitlab-ci

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

使用自定义NSURLProtocol在UIWebView中通过AJAX调用加载文本文件失败

我想使用一个在iOS应用程序上显示一个网站UiWebView.站点的某些组件(即使用AJAX调用加载的Web服务结果)应该由本地数据替换.

请考虑以下示例:

的text.txt:

foo
Run Code Online (Sandbox Code Playgroud)

page1.html:

<html><head>
    <title>test</title>
    <script type="text/javascript" src="jquery.js"></script>
</head>
<body>
<div id="target"></div>
<script type="text/javascript">
    function init(){
        $.get("text.txt",function(text){    
            $("#target").text(text);
        });
    }
    $(init);
</script>
</body></html>
Run Code Online (Sandbox Code Playgroud)

查看控制器:

@interface ViewController : UIViewController <UIWebViewDelegate>
    @property (nonatomic,assign) IBOutlet UIWebView *webview;
@end


@implementation ViewController
    @synthesize webview;
    //some stuff here
    - (void)viewDidLoad
    {
        [super viewDidLoad];
        [NSURLProtocol registerClass:[MyProtocol class]];
        NSString *url = @"http://remote-url/page1.html";
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
        [request setCachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData];
        [webview loadRequest:request];
    }
@end
Run Code Online (Sandbox Code Playgroud)

MyProtocol:

@interface MyProtocol : NSURLProtocol

@end

@implementation MyProtocol

+ (BOOL) …
Run Code Online (Sandbox Code Playgroud)

uiwebview ios

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

无法将Docker Volume目录的所有者更改为非root用户

我在Ubuntu 14.04.1 LTS上使用Docker 1.4.1,内核为3.13.0-4.

考虑以下Dockerfile

FROM debian:wheezy

VOLUME /var/myvol
# RUN mkdir /var/myvol

# copy content to volume
ADD foo /var/myvol/foo
# create user, and make it new owner of directory
RUN useradd nonroot \
    && chown -R nonroot:nonroot /var/myvol/ \
    && ls -al /var/myvol
# switch to new user
USER nonroot
# remove directory owned by user
RUN ls -al /var/myvol && rm /var/myvol/foo && ls -al /var/myvol
Run Code Online (Sandbox Code Playgroud)

用它构建它

touch foo
docker build -t test .
Run Code Online (Sandbox Code Playgroud)

然后产生的输出是

Step 0 …
Run Code Online (Sandbox Code Playgroud)

docker dockerfile

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

haskell:read不解析没有显式类型的浮点数

考虑以下功能

add1 :: Num a => a -> a
add1 x = x + 1
Run Code Online (Sandbox Code Playgroud)

以及以下申请

*Main> add1 2
3
*Main> add1 2.2
3.2
*Main> add1 (read "1")
2
add1 (read "1.5"::Float)
2.5
*Main> add1 (read "1.5")
*** Exception: Prelude.read: no parse
Run Code Online (Sandbox Code Playgroud)

为什么最后一次请求add1失败的浮点数,而它适用于整数?为什么我必须在那种情况下指定类型?

haskell

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

如何向 Traefik Ingress Controller 后面的微服务添加缓存?

一段时间以来,我一直在使用基于 Docker 的设置和 nginx 反向代理转发到 Dockerized 微服务。现在我正在评估转向基于 Kubernetes 的方法和Traefik Ingress Controller。

Ingress Controller 提供了为此所需的所有功能,除了一个:它不支持缓存

在提供静态资源方面,微服务的性能不是很好,我更愿意减少负载,以便它们可以专注于其实际目的,处理动态 REST 请求。

有没有办法为基于 Traefik 的 Ingress 添加缓存支持?由于有许多小服务,如果可能的话,我不想为每个微服务启动一个专用的 Pod。此外,如果可能的话,基于配置的方法将不胜感激(也许使用自定义Operator?)。

kubernetes traefik traefik-ingress

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

JavaScript RegExp方法exec()只返回一个项目

可能重复:正则
表达式只执行第一次匹配

"a1b2c3d".replace(/[0-9]/g,"x")
Run Code Online (Sandbox Code Playgroud)

按预期返回"axbxdxd".

/[0-9]/g.exec("a1b2c3d")
Run Code Online (Sandbox Code Playgroud)

但是只返回包含一个项目的数组:["1"].它不应该归还所有比赛吗?

提前致谢!

javascript regex

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