eSockd(Erlang TCP/SSL 服务器框架)1.0-beta 发布

2015-03-04 16:16:56 +08:00
 tencoldays
项目地址:

https://github.com/emqtt/esockd

版本功能:

1. 异步非阻塞TCP/SSL Socket服务器框架

2. 支持Acceptor池与异步Accept

3. 支持最大连接数管理


Q: 为什么不用Ranch?

A: 如果你深入理解下Erlang的TCP服务器结构,比如inet httpd、rabbitmq、ejabberd,就知道Ranch框架不及格。比如两次controlling_proccess,SSL握手阻塞Acceptor,连接Supervisor和最大连接控制都写得如屎。

当然,eSockd也可能如屎一般,但目前是我尽了很大努力拉出来的了...

如果你发现不合理的地方,请邮件我: feng@emqtt.io,或者Pull Request我
4999 次点击
所在节点    程序员
6 条回复
scys
2015-03-04 16:32:41 +08:00
槽点:eSockd也可能如屎一般,但目前是我尽了很大努力拉出来的了...

好吧,冲你这句话,我还看看erlang去,学习下语言
00
2015-04-09 22:10:09 +08:00
厉害,单从repo 来看,repo 主对ranch、rabbitmq networking 非常熟悉。

另,请教个小问题,为什么如此青睐 阻塞 模式,而不像ejabberd 那样使用 半阻塞 模式?
tencoldays
2015-04-10 21:51:39 +08:00
@00 ejabberd 那样使用 半阻塞 模式 是指?
00
2015-04-11 16:34:06 +08:00
@tencoldays
我看ejabberd 的代码,是在controlling_proccess 会将 socket 设置为active once . controlling_proccess 将socket 交给gen_server 进程去处理,也就是不需要显式地执行gen_tcp:recv 操作。

再另外,我用esockd 做了cowboy的 TCP层(替换了ranch),每秒能够处理的请求有10%左右的提升,而且,esockd 的CPU 消耗要比ranch 小。

关于“显式地执行gen_tcp:recv” 的方式,我猜测,您是想用esockd 来替换ranch ?
tencoldays
2015-04-11 18:09:46 +08:00
@00 理解你意思了。 esockd和ranch一样,只负责到TCP accept。一旦socket连接建立后,如何处理比如阻塞、半阻塞、非阻塞,是自行选择的。

这里有示例: https://github.com/emqtt/esockd/tree/master/examples

active_once的: https://github.com/emqtt/esockd/blob/master/examples/gen_server/src/gen_echo_server.erl
00
2015-04-11 21:34:10 +08:00
@tencoldays
多谢,只顾看源代码了,没仔细看example .

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/174438

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX