如何配对用户? (像Omegle.com)

时间:2010-05-05 02:47:53

标签: php mysql ajax chat

我正在尝试编写一个BlackB.com克隆脚本,主要用于学习目的。我是用PHP / MySQL / AJAX做的。

我在找到两个用户并连接它们时遇到了问题。 omegle的目的是“随机”连接两个用户。

我现在正在做的是以下内容:

  • 当用户进入网站时,会话被分配。
  • 每个会话/用户有3种状态(正常,等待,聊天)
  • 首先,用户具有状态Normal和字段“connected_to”= NULL
  • 如果用户单击“开始”按钮,则会分配“等待”状态。然后它查找状态为Waiting的另一个用户,如果找不到,则继续循环,等待“connected_to”改变。当其他用户单击“开始”,然后找到另一个用户等待并相应地更新会话时,“connected_to”将会更改。

现在这有几个问题,例如:

  • 用户一次只能连接到一个用户。在omegle中,您可以同时打开多个聊天。
  • 我不知道这是不是最好的方式。

关于聊天,每个用户都使用AJAX调用从服务器轮询事件,我看到omegle,而不是每秒几个HTTP请求(比方说),做一个请求并等待答案,这意味着PHP脚本无限循环直到得到答案。我每次启动循环时都使用set_time_limit(30)执行此操作。然后当Ajax调用完成后重新开始。这种方法是否正确?

我会很感激您的答案, 谢谢,

卡洛斯

1 个答案:

答案 0 :(得分:1)

我个人认为在轮询服务器和无限期地打开请求之间没有太大区别,因为它们都有明显的优缺点。尝试两者,看看哪一个花费更多。如果服务器忙于处理多个客户端会导致新访问者出现超时错误,那么对于像您这样的聊天室而言,这并不是一个好的情况。

一旦你有更多的东西可以解决,你也可以想看一下彗星服务器甚至网络套接字,但我会专注于让聊天/匹配功能先发挥作用。

所以,如果用户可以有多个聊天,但他们仍然每次聊天一对一配对,我个人会考虑一个解决方案,如果用户想要一个新的聊天(假设它是自愿的),他们实际上开始一个新的会议。使它成为每个用户对象,可以有多个(或无限)聊天会话,每个聊天会话都像你描述的那样:“正常;等待;聊天”。因此,如果用户A进入房间,他会点击“准备好”按钮,这会将他的初始会话从正常更改为等待。一旦他遇到某人,就会加入一个新的“正常”会话,他可以通过点击某个按钮等将其改为“等待”。

可能使常量循环下降的一件事是简单地查询有多少可用或“等待”用户。如果它为0,则继续检查,直到它高于0,而不是循环通过房间中的所有成员,看看他们是否在等待。

第二个想法,而不是0,使它大于1,因为如果你有一个计算总数的方法,那么你的家伙就会被计算在内。