用erlang设计聊天服务器设计模式

用erlang设计聊天服务器设计模式,erlang,erlangweb,Erlang,Erlangweb,我正在尝试为我的社交网络构建一个聊天服务器,这就是我目前提出的设计模式 看看用户处理程序,它是一个工作进程,创建几个链接的用户进程,并根据登录请求将这些进程ID保存到ets表中 但我的问题是,如果有许多并发请求从我的web服务器发送到我的用户处理程序,那么这些消息的处理就会很慢。对吧? 比如,现在如果用户id 2向3发送消息,那么我会打电话。 user\u handler:send\u message(SenderId=2,SendTo=3,message),然后我的用户处理程序获取id为2的用

我正在尝试为我的社交网络构建一个聊天服务器,这就是我目前提出的设计模式

看看用户处理程序,它是一个工作进程,创建几个链接的用户进程,并根据登录请求将这些进程ID保存到ets表中

但我的问题是,如果有许多并发请求从我的web服务器发送到我的用户处理程序,那么这些消息的处理就会很慢。对吧?

比如,现在如果用户id 2向3发送消息,那么我会打电话。 user\u handler:send\u message(SenderId=2,SendTo=3,message),然后我的用户处理程序获取id为2的用户的进程id并调用 用户:发送消息(Pid,SendTo=3,消息)。其中user:send_message/3获取用户3的进程id,然后检查其他条件,最后将消息发送到用户3的进程id

嗯,我认为这不是一个好的架构

因此,任何建议都是可以接受的

谢谢你,很抱歉我的英语不好


不要在一个流程代码中保存所有会话信息,只需在其
init
状态中保存每个会话信息,并在
terminate
状态中删除其会话信息即可

我不知道您在使用什么,但如果您正在使用TCP套接字,并且担心接受新连接,我建议您在其服务器体系结构中使用,您可以有多个接受器接受一个套接字服务器的连接,每个接受器都有自己的池,用于它接受的连接:


是的,这是个好主意,我正在考虑,让我们看看。但是,您能告诉我如何在当前用户登录时阻止另一个登录请求吗?它不会导致一些竞争条件吗?您可以使用Mnesia,例如,在sockerl Behavior中,您可以在收到登录请求后检查Mnesia(使用其事务)是否存在用户。好的,我会让您知道我做了什么。谢谢。:)