我是一个真正的Erlang新手(1周前开始),我试图通过创建一个小而高效的聊天服务器来学习这种语言。 (当我说有效率的时候,我的意思是我有5台服务器用来对数十万连接的客户端进行压力测试 - 一百万会很棒!)什么是最好的,最有效的客户端池技术与Erlang
我发现一些教程这样做,唯一的是,每个教程我发现,是IRC喜欢的。如果一个用户发送消息,除发件人以外的所有用户都将收到该消息。 我想稍微改变一下,并使用一对一的讨论。
什么是搜索连接用户的最有效的客户端池? 我想过注册过程,因为它似乎尽我所需,但我真的不认为这是更好的方式来做到这一点。 (或者最好的办法就是这样做)。
有没有人会有这样的建议吗?
编辑:
每个连接的客户端都会影响到一个ID。
当用户连接时,它首先发送一个登录命令给它的id。 当一个用户要发送消息到另一个消息看起来像这样
[ID-NUMBER][Message] %% ID-NUMBER IS A FIXED LENGTH
当我问“最有效的客户池”,我实际上是寻找检索最快的方式/添加/连接的客户端列表,它可能是大(几千 - 百年甚至几百万)在删除一个客户端
编辑2:
为了回答一些问题:
- 我使用原始套接字(使用telnet,现在与服务器通信) - 可能会移动后到SSL ...
- 这是我自己的协议
- 每一个客户是一个催生的Pid
- 每个客户端的Pid都链接到它自己的监视器上(主要是为了调试的原因 - 客户端如果断开连接,它应该通过自己从头开始的认证来重新连接)
- 我在开始编码之前已经阅读了几本书,所以我还没有掌握Erlang的每一个方面,但我不是没有意识到这一点,我会在需要的时候阅读更多关于它的内容。
- 我真正想要的是存储和搜索PID的最佳方式,以便将PID直接从进程发送到进程。
我应该使用列表编写自己的搜索客户端函数吗?
还是应该使用ets?
甚至使用register/2取消注册/ 1和whereis/1来维护我的客户端列表,使用它的唯一ID作为原子,这似乎是最简单的方法,我真的不知道它是否是高效,但我很确定这是一个丑陋的解决方案;-)?
我认为这是一个很棒的问题,虽然有点波浪。 – 2012-02-01 15:31:16
您可以针对'搜索连接用户最有效的客户端池是什么?'这个更具体一点吗?我没有得到你的问题。 – Isac 2012-02-01 16:17:50
@Isac:我编辑了我的帖子,希望你能找到更具体的 – TheSquad 2012-02-01 16:57:21