新手问题:如何让在A(物理)服务器的A用户,直接与在B(物理)服务器的B用户进行通讯

13 views
Skip to first unread message

hu Rodger

unread,
Dec 1, 2009, 11:21:57 PM12/1/09
to Erlang China
各位达人好!
经huoju介绍才知道这个erlang,并知道了这里。
研究了两天半,发现erlang是个不错的好玩意儿,也正是咱想找的一个快捷的、强大的开发环境。

但,我一直搞不懂一个问题,如题:如何让在A(物理)服务器的A用户,直接与在B(物理)服务器的B用户进行通讯。

假设,我们有了海量用户了,需要多个物理服务器进行协作。那么,如何实现类似的跨服务器通讯呢?
或则比如,IM软件中,A用户登录了A服务器,B用户登录了B服务器,C用户登录了C服务器。那么,A用户如何给B、C服务器中的B、C用户发消息,并
得到他们返回的消息呢?

或许幼稚了。但,经过咱google之后没找到答案,只能来请教达人们。

相信,我的这个问题,也是大多数erlang新手遇到的一个疑惑,因此,烦请各位给予完整的解答。

THX!

Zoom.Quiet

unread,
Dec 1, 2009, 11:45:20 PM12/1/09
to erlang...@googlegroups.com
2009/12/2 hu Rodger <jzge...@gmail.com>:

> 经huoju介绍才知道这个erlang,并知道了这里。
> 研究了两天半,发现erlang是个不错的好玩意儿,也正是咱想找的一个快捷的、强大的开发环境。
>
咔咔咔!这个感觉和以下的基础问题不吻合哪...

> 但,我一直搞不懂一个问题,如题:如何让在A(物理)服务器的A用户,直接与在B(物理)服务器的B用户进行通讯。
>

这里的用户请自动替换成 erl 的进程,
通讯请自动理解为消息,
而 erlang 的文档可以说是最最全面的了:
Erlang -- Concurrent Programming
http://www.erlang.org/doc/getting_started/conc_prog.html#id2263485
使用 !
PANG 动作,你可以在任意时刻向新意网络结点中的进程发送消息
当然接受也一样
建议自个儿写个最最简单的 echo 脚本,部署到多台主机上就知道了

> 假设,我们有了海量用户了,需要多个物理服务器进行协作。那么,如何实现类似的跨服务器通讯呢?
> 或则比如,IM软件中,A用户登录了A服务器,B用户登录了B服务器,C用户登录了C服务器。那么,A用户如何给B、C服务器中的B、C用户发消息,并
> 得到他们返回的消息呢?
>
> 或许幼稚了。但,经过咱google之后没找到答案,只能来请教达人们。
>
> 相信,我的这个问题,也是大多数erlang新手遇到的一个疑惑,因此,烦请各位给予完整的解答。

--
http://zoomquiet.org 人生苦短? Pythonic!
KM乃是培育可催生自学习型组织的文化氛围! (KM=Knowledge Management=知识管理)

Message has been deleted

Karl Ma

unread,
Dec 2, 2009, 12:32:21 AM12/2/09
to erlang...@googlegroups.com
名字起的好,哈哈,开个玩笑。

2009/12/2 Rodger hu <jzge...@gmail.com>
首先感谢这么快就收到了回答,Group真是不错,热诚!

erlang是个强大的玩意儿,但有些问题搞不懂,这不会影响erlang在哥们儿心目中的地位的,只能说,咱还是没入门呢。

马上按照仁兄的建议去实验,搞echo先。再有问题,我再来继续问哈。

谢!

       - Best regard
       - Rodger hu

====================================
  岩

电话 :     13511073025
Msn  :     rodg...@hotmail.com
============================



--
Karl Ma

hu Rodger

unread,
Dec 2, 2009, 6:04:15 AM12/2/09
to Erlang China
简单的echo写过了,但echo是A用户发数据到A服务器,并返回给A用户。并不能实现,A用户发数据到A服务器,并让链接在B服务器的B用户得到消
息阿。。。

实在搞不懂了,拜托再详细说明一点点。

我曾设想过,A用户发送数据到A服务器,他的目的是让登录在B服务器的B用户收到。因此,应由A服务器将消息转发到B服务器,并由B服务器发送数据出
去。这样的设想,正确么?是不是跟erlang的概念不同?

咱是新人,买的书也在路上,所以先来问问大家哈。

THX!

On 12月2日, 下午12时45分, "Zoom.Quiet" <zoom.qu...@gmail.com> wrote:
> 2009/12/2 hu Rodger <jzgen...@gmail.com>:> 经huoju介绍才知道这个erlang,并知道了这里。


> > 研究了两天半,发现erlang是个不错的好玩意儿,也正是咱想找的一个快捷的、强大的开发环境。
>
> 咔咔咔!这个感觉和以下的基础问题不吻合哪...
>
> > 但,我一直搞不懂一个问题,如题:如何让在A(物理)服务器的A用户,直接与在B(物理)服务器的B用户进行通讯。
>
> 这里的用户请自动替换成 erl 的进程,
> 通讯请自动理解为消息,
> 而 erlang 的文档可以说是最最全面的了:

> Erlang -- Concurrent Programminghttp://www.erlang.org/doc/getting_started/conc_prog.html#id2263485

hu Rodger

unread,
Dec 2, 2009, 6:11:07 AM12/2/09
to Erlang China
另,我参考网上的代码,搞了个echo服务器。
通过自己写的客户端测试代码进行测试,建立了1000-2000个链接,并什么包也不发的情况下。echo服务器提示如下:
=ERROR REPORT==== 2-Dec-2009::04:53:10 ===
File operation error: emfile. Target: ./erl_scan.beam. Function:
get_file. Process: code_server.
{"init terminating in do_boot",{badarg,[{io,format,[<0.22.0>,"[gateway]
[~p] -> socket connect faild: ~p~n",[{4,53,10},emfile]]},
{init,start_it,1},{init,start_em,1}]}}


这个是啥意思?

附:操作系统是
Linux debian.local 2.6.26-1-686 #1 SMP Sat Jan 10 18:29:31 UTC 2009
i686 GNU/Linux

erlang 版本是:
root@debian:/home/jzgenius/_study# erl
Erlang (BEAM) emulator version 5.6.3 [source] [async-threads:0]
[kernel-poll:false]

Eshell V5.6.3 (abort with ^G)


Feng Yu

unread,
Dec 2, 2009, 6:41:49 AM12/2/09
to erlang...@googlegroups.com
emfile  你的文件句柄用光! 默认是1024, ulimit -n 999999

专注 高性能容错分布式服务器的研究和实现
http://blog.yufeng.info



2009/12/2 hu Rodger <jzge...@gmail.com>

LOGOLS

unread,
Dec 3, 2009, 6:18:23 AM12/3/09
to Erlang China
如果A,B用户都是erlang process,并且AB登录后将进程ID由master svr统一管理
a_loop() ->
%% 向master服务器查询B进程ID
{master, master_svr} ! {query, self(), B_Name},
receive
{query_rst, BID} -> BID ! {MsgTag, MsgData} %%向B进程发送数据
end
Reply all
Reply to author
Forward
0 new messages