问题标签 [ocaml-lwt]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ocaml - 创建 GET/POST 服务 Ocsigen
我正在使用 构建一个应用程序Ocsigen
,此应用程序不会连接到数据库,目标是将内容从主网站复制到此处。(我正在使用 curl 来获取请求)
所以我的问题是,我正在尝试与用户进行“登录”,并且我想构建一个服务来保存我的代码username
和password
用户引入的。然后我可以使用username
和password
向主网站发出 GET 请求。
我的问题只有一个,我尝试了很多方法来构建一个保存这两个字符串的服务,但我想不出办法。
我做了很多不同的尝试,最后一次我做了类似以下的事情:
基于 Ocsigen 在他们的网站上的一个例子,但我不工作......
我创建了一个表单,它成功地执行了我创建的服务,但该服务从来没有做我需要的事情。
对不起,如果我解释得很糟糕......知道如何解决这个问题吗?我走错路了?
谢谢!
PS:我也尝试从 Ocsigen-Start src 文件夹中编辑 Os_services.connect_service ,我想我必须对这种情况进行 Post Service ,但我还是没有做我想做的事。
ocaml - 多次调用 Lwt_process.pread_lines
我正在尝试使用 Lwt_process.pread_lines 来获取一些命令的输出。在我的 Lwt_main.run 中,我调用它一次,然后通过运行良好的 Lwt_stream.map 开始分别处理每一行输出。
但是,在那个处理中,如果我调用另一个 Lwt_process.pread_lines,它似乎被忽略了:
我不明白,我什至没有例外。我已经尝试过 pread_line 和 pread_lines,看起来 >>= 之后的任何内容都被忽略了。如果我使用 |> 虽然它会被调用,但我当然需要使用输出。
我已经阅读了文档,并查看了 Lwt_process 的来源,但我没有看到任何表明您不能随意调用它的任何信息,它似乎为每个进程创建了一个新管道,至少在输出上。当然,我的外部进程根本不使用标准输入,它只是对 df 命令的调用。我错过了什么吗?
我应该清楚:它没有挂起,程序确实完成得很好。它只是从不调用任何试图使用后面命令的结果的东西,第一个工作正常。
谢谢
ocaml - Cstruct 和 Lwt_bytes
据我所知,Lwt_bytes 似乎使用与 Cstruct 相同的类型(或者可能使用 cstruct 本身),但出于某种原因,我不能让它们两者一起工作:
字节不是完全相同的类型吗?我怎样才能做到这一点?为了方便 Cstruct.LE,我尝试使用 Cstruct 而不是 Lwt_bytes,这些字节似乎没有。谢谢
ocaml - ^C 进程正在执行 Lwt 读取
我正在开发一个使用Lwt_ioLwt_io.read_into_exactly
和其他功能的小程序。这一切都很好,但是^C (sigint) 没有做任何事情,这迫使我每次测试它时都要杀死 -9,这有点烦人。
我应该做些什么来让它被^C正常杀死,也许将套接字设置为非阻塞或什么?
谢谢 !
ocaml - 在绑定线程链中将 ref 设置为 Lwt_io.read_line 的结果
我正在创建一个聊天服务器,并且我有一个处理登录的函数。存在一个名为 nick 的预设 ref 和一个预设输入流 imp。我的代码如下:
但是,这段代码给了我错误:
我知道以下代码确实有效:
简而言之,我不知道如何将 vars 分配给从线程获得的值。
ocaml - 创建聊天服务器
我正在使用 lwt 以 Ocaml 语言创建聊天服务器。我希望它能够做的是提示用户输入昵称,存储昵称,然后输出用户已加入聊天。
我已经尝试过实现自己的代码,如下所示。
结果应该是在运行程序时,会:
- 打印欢迎信息到 outp,
- 从 inp 读取昵称,
- 将新值分配给 nr
- 将 nr 添加到会话
- 宣布用户已加入。
现在,它编译,但不输出任何东西。
ocaml - Ocaml Lwt 类型混淆
我很困惑为什么 Lwt 打印函数Lwt_io.print
有类型
string -> unit Lwt.t
但是如果我运行Lwt_io.print "a" >>= fun () -> Lwt_io.print "b";;
结果是打印“ab”并返回类型单位。
我想这将是一个类型错误,因为 Lwt_io.print 返回单位 Lwt.t 而不是单位。为什么调用线程的第二部分?
concurrency - 在 OCaml 中使用 Lwt 时如何进行循环中断
我正在编写代码来监视文件的内容。当程序到达文件末尾时,我希望它干净地终止。
但是,当读取文件并到达末尾时,程序并没有终止,它只是挂起,我必须用 Ctrl+c 转义。我不确定 bind 的幕后发生了什么,但我认为无论它在做什么,最终Lwt_io.readline ic
都应该到达文件末尾并返回一个End_of_file
异常,这可能会被传递给处理程序等。
如果我不得不猜测一个决议,我想也许在定义的最后一个绑定中>>=
我会包括一些if
检查。但我想,我会检查是否Lwt_io.read_line
返回End_of_file
,我认为应该由handler
.
ocaml - Lwt 是否利用数据依赖来增加并行性
我正在尝试通过几个示例来弄清楚 lwt 具体在做什么:
如果我有:
这是否运行 f 然后 g,或者由于 y 不依赖于 x,它会并行运行吗?
ocaml - How to send multiple TCP messages and continue when one has succeeded
I'm writing some networking code currently and I need to send out a large number of messages and then wait for a single response.
Given that I have a function that returns the input and output channels for a socket I have:
My understanding of this is that pick should cancel any ongoing requests after it has a fulfilled promise in resps
. The issue is that if any of those connections fails/is refused, an exception is raised Unix.ECONNREFUSED
.
My question is what is the correct semantics to force Lwt.pick
to ignore the exceptions?
Options I've thought of so far are to catch the exception explicity in the requests:
But I'm not sure under what conditions the Lwt.pick
will view those promises are rejected?
Update: I'm now handling the errors with cancellable, unfulfillable promises:
This feels hacky but seems to work so far.