如何配对用户? (如 Omegle.com)
Posted
技术标签:
【中文标题】如何配对用户? (如 Omegle.com)【英文标题】:How to pair users? (Like Omegle.com) 【发布时间】:2011-02-15 18:03:45 【问题描述】:我正在尝试做一个 Omegle.com 克隆脚本,主要用于学习目的。我在 php/mysql/AJAX 中做。
我在查找和连接两个用户时遇到问题。 omegle 的目的是“随机”连接两个用户。
我现在正在做的事情如下:
当用户进入网站时,会分配一个会话。 每个会话/用户有 3 种状态(正常、等待、聊天) 起初,用户的状态为 Normal,并且字段“connected_to” = NULL 如果用户单击“开始”按钮,则分配“等待”状态。然后它寻找另一个状态为 Waiting 的用户,如果没有找到,则继续循环,等待“connected_to”改变。 “connected_to”会在其他用户点击 START 时发生变化,然后发现其他用户正在等待并相应地更新会话。现在这有几个问题,例如:
一个用户一次只能连接到一个用户。在 omegle 中,您可以同时打开多个聊天。 我不知道这是否是最好的方法。关于聊天,每个用户都在使用 AJAX 调用从服务器轮询事件,我看到 omegle,而不是每秒几个 HTTP 请求(比方说),做一个请求并等待答案,这意味着PHP 脚本无限循环,直到得到答案。每次循环开始时,我都使用 set_time_limit(30) 执行此操作。然后当 Ajax 调用完成后重新开始。这种方法正确吗?
非常感谢您的回答, 谢谢,
卡洛斯
【问题讨论】:
【参考方案1】:我个人认为轮询服务器和无限期地打开请求之间没有太大区别,因为它们都有明显的优缺点。两者都试一下,看看哪一个更贵。如果让服务器忙于处理多个客户端最终导致新访问者出现超时错误,那么对于像您这样的聊天室来说,这并不是一个好的情况。
一旦你解决了更多问题,你可能还想研究彗星服务器甚至网络套接字,但我会首先专注于让聊天/匹配功能发挥作用。
因此,如果用户可以进行多次聊天,但每次聊天仍然一对一配对,我个人会考虑一种解决方案,如果用户想要新的聊天(假设是自愿的),他们实际上开始一个新的会话。使每个用户对象可以有多个(或无限)聊天会话,每个会话都像您描述的那样:“正常;等待;聊天”。因此,如果用户 A 进入房间,他点击“就绪”按钮,这会将他的初始会话从正常更改为等待。一旦他遇到某人,就会开始一个新的“正常”会话,他可以通过点击某个按钮等将那个会话更改为“等待”。
可能会使持续循环下降一点的事情是简单地查询有多少可用或“等待”用户。如果为 0,则继续检查直到大于 0,而不是遍历房间中的所有成员以查看他们是否在等待。
再想一想,不是 0,而是大于 1,因为如果你有一个计算总数的方法,你等待的人就会被计算在内。
【讨论】:
谢谢。你给了我一个关于如何进行的想法。但是你没有说出你对我用来匹配用户的程序的看法。你知道更好的方法吗,比如这样做的经典方法?我不想重新发明***。谢谢大佬。 此外,您可以测试 UPDATE 的结果以查看查询是否完成。因此,假设您有一个处于“等待”状态的用户和另一个正在发起聊天的用户。你运行: UPDATE sessions SET status = 'chatting' WHERE userid = ? AND 状态 = '等待'。然后,如果该 UPDATE 影响了 1 行,您知道用户从等待变为聊天,因此很好。 (我试图将这些内容分成段落,但 *** 的 javascript 令人讨厌)。以上是关于如何配对用户? (如 Omegle.com)的主要内容,如果未能解决你的问题,请参考以下文章