我正在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)
从客户端的角度来看,这两行将同时发送.任何建议值得赞赏:)
在我亲自制作的每次写入后都可以刷新,但在我的用例中,这还不够:
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) 我想在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的新手,任何帮助都会受到赞赏.
我熟悉LXC,想试试docker.我面临的问题是我无法找到一种方法来告诉docker在后台启动容器而不执行命令.例如,使用LXC我会这样做:
lxc create -t ubuntu -n my_container
lxc-start -n my_container -d
在这一点上,我将有一个可以用作任何VM的运行容器(ssh到它,在其中安装东西......)似乎docker阻止了这种用法.我错过了什么吗?
我必须设置一个可以处理故障转移的数据库(如果一个崩溃,另一个接管).为此,我决定使用mongodb:我设置了一个包含两个实例的副本集.每个实例都在单独的VM上运行.我有几个问题:
建议在副本集中使用至少3个实例.可以只使用两个吗?
我有两个实例,然后是两个IP地址.我应该为需要在数据库中读/写的应用程序提供哪个IP?当数据库关闭时,请求将如何重定向到仍在运行的实例?
一些帮助入门将是伟大的!
我试图在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程序.不确定所有这些是否相关,但任何帮助都会很棒!干杯
我来找你,因为我有这个非常讨厌的问题.在xCode中,我删除了一些文件,现在,当我想推送我的源代码时,它说我不能,因为有一些未提交的更改.未提交的更改来自已删除的文件(xcode显示这些标有ad的文件).
我的问题是我如何让我的git repo同步它,所以我可以推送我的资源?
我想知道如何在诸如的方法中使用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:方法根据标签处理数据?
我正在学习 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. 我计划在我的应用程序每次停止时擦除测试数据库,并在每次启动时创建它(使用start和stop方法)。
创建的数据目录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) 我正在编写一个小型客户端应用程序来与服务器通信.我在客户端和服务器之间打开一个套接字,可以使用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)
我不知道为什么这不起作用?任何帮助都会很棒!问候