小编rmo*_*njo的帖子

在Golang中没有缓冲http.ResponseWritter

我正在Go中编写一个简单的Web应用程序,我希望将我的响应流式传输到客户端(即,在请求完全处理后,不会缓冲并以块的形式发送):

func handle(res http.ResponseWriter, req *http.Request) {
  fmt.Fprintf(res, "sending first line of data")
  sleep(10) //not real code
  fmt.Fprintf(res, "sending second line of data")
}
Run Code Online (Sandbox Code Playgroud)

从客户端的角度来看,这两行将同时发送.任何建议值得赞赏:)

@dystroy回答后编辑

在我亲自制作的每次写入后都可以刷新,但在我的用例中,这还不够:

cmd := exec.Command("a long command that outputs lots of lines")
cmd.Stdout = res //where res is a http.ResponseWritter
cmd.Stderr = res
err := cmd.Run()
Run Code Online (Sandbox Code Playgroud)

我希望我的输出cmd也被刷新.无论如何要"autoflush"ResponseWritter?

我在golang的邮件列表上找到了帮助.有两种方法可以实现这一点:使用允许接管HTTP的底层TCP连接的劫持程序,或者在写入和刷新的go例程中管道命令的stdout和stderr:

pipeReader, pipeWriter := io.Pipe()
cmd.Stdout = pipeWriter
cmd.Stderr = pipeWriter
go writeCmdOutput(res, pipeReader)
err := cmd.Run()
pipeWriter.Close()

//---------------------
func writeCmdOutput(res http.ResponseWriter, pipeReader …
Run Code Online (Sandbox Code Playgroud)

http flush stream go

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

Golang捕获信号

我想在Go中实现一个"进程包装器".基本上它会做什么,是启动一个进程(比如节点服务器)并监视它(捕获信号,如SIGKILL,SIGTERM ...)

我认为要做的方法是使用syscall.Exec以下命令在go例程中启动节点服务器:

func launchCmd(path string, args []string) {
  err := syscall.Exec(path, args, os.Environ())
  if err != nil {
    panic(err)
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我想捕获由执行的命令生成的每个可能的信号syscall.我是Go的新手,任何帮助都会受到赞赏.

signals system-calls go

19
推荐指数
2
解决办法
3万
查看次数

使用Docker启动容器而不指定命令

我熟悉LXC,想试试docker.我面临的问题是我无法找到一种方法来告诉docker在后台启动容器而不执行命令.例如,使用LXC我会这样做:

lxc create -t ubuntu -n my_container

lxc-start -n my_container -d

在这一点上,我将有一个可以用作任何VM的运行容器(ssh到它,在其中安装东西......)似乎docker阻止了这种用法.我错过了什么吗?

lxc docker

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

使用mongodb进行故障转移

我必须设置一个可以处理故障转移的数据库(如果一个崩溃,另一个接管).为此,我决定使用mongodb:我设置了一个包含两个实例的副本集.每个实例都在单独的VM上运行.我有几个问题:

  • 建议在副本集中使用至少3个实例.可以只使用两个吗?

  • 我有两个实例,然后是两个IP地址.我应该为需要在数据库中读/写的应用程序提供哪个IP?当数据库关闭时,请求将如何重定向到仍在运行的实例?

一些帮助入门将是伟大的!

replication transparency failover mongodb

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

TLS错误:socket在nodejs中挂起

我试图在nodejs中使用tls连接服务器.这是我的代码:

var options = {
  rejectUnauthorized: false //self signed certificate
};
co = require("tls").connect(5200, "my_host", options, function(){
   co.on("data", function(data) {
      //do domething
   })

}
Run Code Online (Sandbox Code Playgroud)

这是简化的代码.如果我发现错误事件,我有一个ECONNRESET错误,如果我没有,我有这个跟踪:

Error: socket hang up
at SecurePair.error (tls.js:1001:23)
at EncryptedStream.CryptoStream._done (tls.js:697:22)
at EncryptedStream.read [as _read] (tls.js:493:12)
at EncryptedStream.Readable.read (_stream_readable.js:320:10)
at CleartextStream.onCryptoStreamFinish (tls.js:301:47)
at CleartextStream.g (events.js:175:14)
at CleartextStream.EventEmitter.emit (events.js:92:17)
at finishMaybe (_stream_writable.js:354:12)
at endWritable (_stream_writable.js:361:3)
at CleartextStream.Writable.end (_stream_writable.js:339:5)
Run Code Online (Sandbox Code Playgroud)

如果我使用openssl s_client -connect my_host:5200它直接连接到我的服务器,效果很好.奇怪的是,节点版本为0.10.*,它可以在ubuntu 10.04上运行,但在我的mac上也不适用于ubuntu 12.04.我的服务器也是运行ubuntu 10.04的nodejs程序.不确定所有这些是否相关,但任何帮助都会很棒!干杯

sockets ubuntu ssl node.js

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

无法在xcode中推送远程git分支

我来找你,因为我有这个非常讨厌的问题.在xCode中,我删除了一些文件,现在,当我想推送我的源代码时,它说我不能,因为有一些未提交的更改.未提交的更改来自已删除的文件(xcode显示这些标有ad的文件).

我的问题是我如何让我的git repo同步它,所以我可以推送我的资源?

git xcode push commit

3
推荐指数
2
解决办法
9900
查看次数

GCDAsyncSocket标记参数

我想知道如何在诸如的方法中使用tag参数

readDataWithTimeout: tag:
writeData: tag:
Run Code Online (Sandbox Code Playgroud)

如果我想使用标签来识别数据包的类型,会发生什么?例如,我说tag == 2表示数据包是来自客户端的消息,tag == 1表示数据包是来自服务器的消息...如果可以,我需要调用readData:withTag:几次(每个不同的标签一次)?

[readDataWithTimeout:-1 tag:1];
[readDataWithTimeout:-1 tag:2];
Run Code Online (Sandbox Code Playgroud)

有没有办法说:"读取每个数据而不关心标签",然后在didReadData:withTag:方法根据标签处理数据?

objective-c gcdasyncsocket

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

在 Elixir 中处理测试和开发 Mnesia 数据库

我正在学习 Elixir,需要一些帮助。我有一个使用的简单应用程序mnesia(暂时不使用Amnesia)。当我开始时,mnesia我会这样做:

:mnesia.create_schema([node()])
:mnesia.create_table(Table, [attributes: [:id, :name]])
:mnesia.start
Run Code Online (Sandbox Code Playgroud)

这将创建一个Mnesia.nonode@nohost目录。我想要的是至少有 2 个不同的数据库,一个用于测试,一个用于开发。我目前正在使用Mix.env. 我计划在我的应用程序每次停止时擦除测试数据库,并在每次启动时创建它(使用startstop方法)。

创建的数据目录mnesia采用 Erlang VM 的名称,这就是为什么我想我需要根据环境(:dev,:test:prod)命名我的 VM 。

这可能吗?这是正确的方法吗?


更新

我知道我可以选择我的 mnesia 数据库数据的存储位置(谢谢 Maryna)。但是当我指定一个“自定义”目录时,我有这种奇怪的行为:

iex(1)> :mnesia.system_info()
===> System info in version {mnesia_not_loaded,nonode@nohost,
                                {1486,66262,472243}}, debug level =  trace <===
opt_disc. Directory     <<"/my/custom/dir">> is NOT used.
use fallback at restart = false
running db nodes   = []
stopped db nodes …
Run Code Online (Sandbox Code Playgroud)

mnesia elixir

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

BufferedWriter和socket中的java,写没有效果

我正在编写一个小型客户端应用程序来与服务器通信.我在客户端和服务器之间打开一个套接字,可以使用BufferedReader读取从服务器发出的任何内容.这是在一个线程中读取的.但是,当我使用BufferedReader在套接字上写入时,没有任何反应!没有异常,但没有任何服务器响应(它应该有服务器响应)这是我的代码:

socketWritter.write(message);
socketWritter.write("\n");
System.out.println(socketWritter.toString());
socketWritter.flush();
Run Code Online (Sandbox Code Playgroud)

我的套接字正确打开,mu BufferedWriter正确初始化:

new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))
Run Code Online (Sandbox Code Playgroud)

我不知道为什么这不起作用?任何帮助都会很棒!问候

java sockets bufferedwriter socket.io

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