使用 OTP 原理的非阻塞 TCP 服务器
我开始学习 Erlang,所以我尝试写“hello, world!”并发编程,IRC 机器人。
我已经使用 Erlang 编写了一个,没有任何 OTP 细节(管理程序、应用程序等行为)。我希望使用 OTP 原则重写它,但不幸的是我无法找出使用 OTP 进行套接字编程的“正确”方法。
似乎唯一合理的方法是手动创建另一个进程并将其链接到主管,但肯定有人在某个地方之前已经这样做过。
I'm starting to learn Erlang, so I'm trying to write the "hello, world!" of concurrent programming, an IRC bot.
I've already written one using Erlang without any OTP niceties (supervisor, application, etc. behaviours). I'm looking to rewrite it using OTP principles but unfortunately I can't figure out the "right" way to do socket programming with OTP.
It seems the only reasonable way is to create another process manually and link it to the supervisor, but surely someone, somewhere, has done this before.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
很高兴您已经开始学习 Erlang/OTP!
以下资源非常有用:
<块引用>
必须使用这些函数来实现进程对系统消息的使用
这是我的项目中的一些代码。我也是一名Erlang学习者,所以请不要太相信代码。
请注意,这是一个合规的 OTP 流程(可以由主管管理)。您应该使用 AcceptFun 来生成(=更快)一个新的工作子进程。不过我还没有彻底测试过。
(
2>
的ok
之后,我将 Google Chrome 浏览器指向端口 8080:这是对 TCP 的一个很好的测试!)Great that you've began learning Erlang/OTP!
The following resources are very useful:
This is some code I have in my project. I am an Erlang learner too, so don't trust the code too much, please.
Note that this is a compliant OTP process (it can be managed by a supervisor). You should use
AcceptFun
to spawn (=faster) a new worker child. I have not yet tested it thorough though.(After
2>
'sok
I pointed my Google Chrome browser to port 8080: a great test for TCP!)实现异步 TCP 侦听器的另一种方法是使用
supervisor_bridge
。这是我写的一些代码来展示这一点(未经测试):
比我的其他答案更容易理解。
connection_bridge
也可以扩展以支持 UDP 和 SCTP。Another way to implement an asynchronous TCP listener is by using
supervisor_bridge
.Here is some code that I wrote to show this (not tested):
A lot easier to understand than my other answer. The
connection_bridge
can be extended to support UDP and SCTP too.我认为这就是您正在寻找的:
http://www.trapexit.org/Building_a_Non-blocking_TCP_server_using_OTP_principles
这是关于如何使用 OTP 构建非阻塞 TCP 服务器的完整教程(当然,有完整的文档和解释)。
I think this is what you're looking for:
http://www.trapexit.org/Building_a_Non-blocking_TCP_server_using_OTP_principles
It's a full tutorial about how to build a non-blocking TCP server using OTP (of course, is fully documented and explained).