2010-04-15 44 views
4

有人可以向我解释chatroulette背后的架构吗? 我正在考虑一个类似的项目,只会实现音频 支持(对于初学者)。将此设置为Flash服务器的最佳方法是? 如果是这样,我应该如何进入闪存,我需要flex 4吗?我 有一些初学者与c + +,c#和java的经验,但我从来没有 开发任何网络。chatroulette的体系结构

我也想知道随机函数如何匹配参与者。 你会如何编写这样的代码。

我在这里显然很笨,我非常感谢关于这个问题的一些建议 - 我不希望复制和粘贴解决方案。它 只是很高兴听到你们如何解决这个问题。

非常感谢您

+0

这是真正的Flash10 +层云http://flashrealtime.com/tuts/p2p-in-flash实现P2P的良好的视频教程。html – Kirzilla 2010-09-03 06:22:54

回答

11

AFAIK ChatRoulette在Flash Player 10.1中使用了一组新的API,代号为Stratus,它允许Flash Player实例之间的点对点连接。

因此,而不是视频和音频流推到一个特殊的流媒体服务器,如FMS或Red5独特的ID是共享和对等点直接相互连接。

这有很大的可能性,以减少服务器负载直播的事件,其中1连接到服务器流可以在近邻之间共享。

如果Stratus没有直接在对等设备之间推送流,你能想象一下像ChatRoulette这样的托管账单吗?!

如果你想知道更多请查看Stratus的部分在Adobe小伙子:http://labs.adobe.com/technologies/stratus/

+1

Stratus现在已经成熟为第二代版本代号为Cirrus,更多细节在这里 - http://labs.adobe.com/technologies/cirrus/ – jolyonruss 2011-06-27 09:56:26

+0

我不知道这是否正确 - 层云或Cirrus不允许用于根据许可证生产。 – 2011-07-31 14:29:50

4

你怎么能匹配的参与者?简单。有一个名为“等待用户”的变量,最初被设置为空。当用户连接时,如果“等待用户”为空,则使连接用户成为等待用户。如果等待用户不为空,则创建一个管理这两个用户对话的新线程,并将等待用户设置为空。这种“随机性”意味着如果你有很多访问者,对话应该是随机的。但是,如果您一次只有10个人正在进行对话,那么您不会得到惊人的结果。你需要不断断开连接/连接才能工作。

使用actionscript,您可以通过Microphone.get() [使用google获取更多信息]轻松获得麦克风设备...您必须将收到的数据提供给服务器。

为了不必直接发送HTTP头,你应该创建一个套接字[actionscript支持这个,看看flash.net。[Socket/Sockets?我忘了]]并连接到一个自定义的书面服务器,这是很容易完成与C#...我还没有尝试过使用C++,并没有与Java的工作...

服务器将充当“代理“...