小编Pol*_*Pol的帖子

如何在Nginx日志中记录反向代理上游服务器服务请求?

我们使用Nginx作为此设置的反向代理:

upstream frontends {
  server 127.0.0.1:8000;
  server 127.0.0.1:8001;
  server 127.0.0.1:8002;
  [...]
}

server {
  location / {
    proxy_pass http://frontends;
    [...]
  }
  [...]
}
Run Code Online (Sandbox Code Playgroud)

作为访问日志的一部分,我想记录为请求提供服务的上游服务器,在我们的例子中,这意味着关联的localhost端口.

文档中的变量(http://wiki.nginx.org/HttpProxyModule#Variables)提到$ proxy_host和$ proxy_port,但在日志中它们总是以"frontends"和"80"的值结束.

reverse-proxy nginx

22
推荐指数
2
解决办法
4万
查看次数

如何(重复)读取.NET SslStream超时?

我只需N要从a 读取字节,SslStream但如果在超时之前没有收到任何字节,则取消,同时将流保持在有效状态,以便稍后再试.(*)

对于非SSL流,这可以很容易地完成,即NetworkStream只需使用其ReadTimeout属性,这将使流在超时时抛出异常.不幸的是,这种方法不适SslStream用于官方文档:

SslStream假定当从内部流抛出一个IOException时,超时以及任何其他IOException将被其调用者视为致命的.超时后重用SslStream实例将返回垃圾.应用程序应该关闭SslStream并在这些情况下抛出异常.

[更新1]我尝试了一种不同的方法:

task = stream->ReadAsync(buffer, 0, buffer->Length);
if (task->Wait(timeout_ms)) {
   count = task->Result;
   ...
}
Run Code Online (Sandbox Code Playgroud)

但是如果Wait()返回则这不起作用false:ReadAsync()稍后再次调用它会抛出异常:

抛出异常:System.dll Tests.exe中的"System.NotSupportedException"警告:0:从套接字读取失败:System.NotSupportedException:当另一个读取操作挂起时,无法调用BeginRead方法.

[更新2]我尝试另一种方法,通过调用实现超时Poll(timeout, ...READ)基础上的TcpClient插座:如果返回true,然后调用Read()SSlStream,或者如果它返回false,然后我们有一个超时.这也不起作用:因为SslStream可能使用它自己的内部中间缓冲区,即使还有数据需要读取,Poll()也可以返回.falseSslStream

[更新3]另一种可能性是编写一个自定义Stream子类,它位于NetworkStream和之间SslStream并捕获超时异常并返回0字节SslStream.我不知道如何做到这一点,更重要的是,我不知道是否返回0字节读取SslStream仍然不会以某种方式破坏它.

(*)我试图这样做的原因是,与非安全或安全套接字的超时同步读取是我已经在iOS,OS X,Linux和Android上用于某些跨平台代码的模式.它适用于.NET中的非安全套接字,因此唯一的情况是SslStream.

.net c# networkstream sslstream

16
推荐指数
2
解决办法
1591
查看次数

是否可以使用GCD调度源在套接字上执行异步connect()?

您可以使用GCD调度源从套接字读取和写入,监视侦听套接字的传入连接,但我无法弄清楚如何使用调度源来连接套接字?

在伪代码中,它看起来像这样:

dispatch_source_t source = dispatch_source_create(DISPATCH_SOURCE_TYPE_WRITE, connectingSocket, ...);
dispatch_source_set_event_handler(source, ^{
  // Socket did connect or not
});
fcntl(connectingSocket, F_SETFL, O_NONBLOCK);
connect(connectingSocket, addr, len);
dispatch_source_resume(source);
Run Code Online (Sandbox Code Playgroud)

这比使用更好select().

objective-c grand-central-dispatch

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

如何修复未通过更新的Mercurial仓库因为指向subrepo中缺少修订?

我们的mercurial存储库在尝试更新到具有不再存在的subrepo/revision对的旧分支时会卡住.

abort: unknown revision '22e9bb6a6cd98be85b995f632b2f72d6298f9354'!
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉Mercurial更新到修订版或分支但不尝试更新子版本?

mercurial mercurial-subrepos

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

从不从 std::packaged_task 检索 std::future 的结果是否安全?

std::future从 a创建 a 是否安全std::packaged_task,该 a 在单独的线程上执行,但并不总是检索其结果?

#include <future>
#include <thread>

class Result {
  Result() {}
  ~Result() {}
};

void foo() {
  std::packaged_task<Result()> task(..);
  auto future = task.get_future();
  std::thread thread(std::move(task), ...);
  thread.detach();
  if (future.wait_for(std::chrono::milliseconds(timeout_ms)) == std::future_status::ready) {
    auto result = future.get();  <--- Task didn't take too long, retrieve future result
    ...
  }
}  <--- Task is taking too long, just abort and never call future.get()
Run Code Online (Sandbox Code Playgroud)

它似乎适用于 Clang / libc++: ~Result()is Called on the returned result by the …

c++ packaged-task c++11 stdthread

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

什么是GCDWebServer?

从iOS8中的WKWebView加载本地Web时遇到问题.有一些建议我应该使用GCDWebServer.我通过GCDWebServer阅读,但不太了解GCDWebServer在移动应用程序方面的用途.

你能给我一些使用这个库的实际案例吗?对不起我的无知.

xcode ios wkwebview gcdwebserver

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

与API级别相比,Android NDK平台版本的确切含义是什么?

我有一个Android应用程序,minSdkVersion.apiLevel将18 targetSdkVersion.apiLevel设置为23。因此,我将NDK设置为platformVersion为18。

不幸的是,在将OpenSSL添加到组合中之后,JNI库现在无法链接:

/Users/pol/Downloads/Cross/External/Android-Libraries/openssl-1.0.2g/lib/libcrypto.a(ui_openssl.o):ui_openssl.c:function read_string_inner: error: undefined reference to 'signal'
/Users/pol/Downloads/Cross/External/Android-Libraries/openssl-1.0.2g/lib/libcrypto.a(ui_openssl.o):ui_openssl.c:function read_string_inner: error: undefined reference to 'tcsetattr'
/Users/pol/Downloads/Cross/External/Android-Libraries/openssl-1.0.2g/lib/libcrypto.a(ui_openssl.o):ui_openssl.c:function read_string_inner: error: undefined reference to 'tcsetattr'
/Users/pol/Downloads/Cross/External/Android-Libraries/openssl-1.0.2g/lib/libcrypto.a(ui_openssl.o):ui_openssl.c:function open_console: error: undefined reference to 'tcgetattr'
Run Code Online (Sandbox Code Playgroud)

如果设置,问题就消失了 platformVersion为21(在19上也不起作用)。

如果Android应用程序的API级别为18,但JNI库链接为21,这对Android应用程序意味着什么?在运行4.3的设备上启动时会崩溃吗?

我无法想象该signal符号会从4.3中丢失。这是NDK的错误吗?

android openssl android-ndk

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

使用 Cython 将 malloc 缓冲区从 C 转换为 Python 而不进行复制?

在 Cython 中,假设我有一个 C 函数,它返回一个使用 malloc() 分配的大缓冲区,并预计稍后使用 free() 释放。

现在我需要将此缓冲区作为(字节)str 对象传递给 Python,它将获得它的所有权,并在 str 对象消失时调用 free() 。这可能吗?如何实现?

cython

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

DispatchQueue在Swift中与main.sync崩溃

请向我解释为什么我会遇到这次崩溃?

线程1:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOP,子代码= 0x0)

在这

DispatchQueue.main.sync {print("sync")}

这是我的代码.

    override func viewDidLoad() {
    super.viewDidLoad()


    print("Start")
    DispatchQueue.main.async {
        print("async")

    }
    DispatchQueue.main.sync {
        print("sync")
    }
    print("Finish")
}
Run Code Online (Sandbox Code Playgroud)

event-dispatch-thread ios dispatch-async swift

5
推荐指数
3
解决办法
5642
查看次数

在C++ 11中从C++ 17重新实现std :: map :: try_emplace()?

std::map::try_emplace()看起来非常方便和有效,但它只适用于C++ 17.是否可以在C++ 11中重新实现它?

template <class... Args>
pair<iterator, bool> try_emplace(const key_type& k, Args&&... args);
Run Code Online (Sandbox Code Playgroud)

c++ stl c++11

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