我已经使用jquery和PHP为站点添加了聊天功能,它似乎通常运行良好,但我担心可扩展性.我想知道是否有人有一些建议.对我而言,关键领域是有效管理谁是谁的意识.
detail:我还没有实现long-polling(还),我担心PHP(Apache)中长时间运行的进程的原始数量会失控.
我的代码运行一个定期的jquery ajax轮询(4secs),它首先更新db以说我是活动的并设置时间戳.然后有一个例程检查所有活动用户的时间戳,并将那些外部(10分钟)设置为非活动状态.到目前为止,我的研究结果相当正常.但是,我认为如果我允许每个活动用户检查每个其他活动用户,然后每个人都更新数据库以启动非活动用户,那么我将获得重复工作,记录锁和不必要的服务器负载.
所以我已经实现了"清扫工"的作用.这只是在线用户之一,他继承了清理人员的角色.其他人只是检查是否存在"清扫器"(DB读取)并继续.如果他们检查时没有扫地机,他们会自己扫地(DB写自己的记录).如果有多个,请自己"清扫",随意睡觉并再次检查.
我的理论是,这种方式只有一个用户定期在相关表上写几个记录的更新,其他人都在阅读或只是写自己的记录.所以它工作正常,但问题可能是该过程需要一些DB读取,实际上可能效率低于让每个人像我提到的其他研究一样进行清理.
到目前为止,我已经有超过100个并发用户正常运行,但客户希望扩展到几百个,甚至超过1,000个,我不知道在这个阶段是否这个想法是好的.
有没有人知道这是否是一个好的方法,它是否可以扩展到数百个活跃用户,或者你是否可以推荐一种不同的方法?
另外,实际聊天消息的长轮询/彗星似乎很简单,我已经为代码找到了一个很好的资源,但是有一些博客评论表明它对PHP和apache特别危险.活动线程等.使用usleep和session_write_close可以最大限度地减少影响.
任何人都可以为数百名活跃用户设置PHP长轮询的实际经验,也许你可以放心吧!我真的希望将其迁移到node.js(没有经验)吗?
先感谢您
托尼
我正在尝试在新的 Angular2 应用程序中实现过滤机制,这将允许我过滤数组中的条目列表。这些条目可能有大约 20 个可以过滤的属性。到目前为止,我已经在一个组件中创建了一个过滤器列表,然后创建了一个作为子组件路由到的列表组件。然后我计划通过路由器将过滤器作为 queryParams 传递。从只有一个过滤器开始这很好:
在发送端我有:
this.router.navigate(['/findlist'], {queryParams: {'g': myParam}});
Run Code Online (Sandbox Code Playgroud)
在接收端,我有:
this.subscription = this.route.queryParams.subscribe(
(queryParam: any) => this.myFilter = queryParam['g']
);
Run Code Online (Sandbox Code Playgroud)
然后我将 myFilter 传递给过滤器管道以进行匹配和过滤。到目前为止一切正常。
但是,我不知道如何扩展它以允许多个潜在的参数,其中大部分是空白/不需要的。
我可以想象我需要通过 queryParam 定义一个包含所有活动过滤器的数组,但我能找到的唯一文档,只显示只传递一个参数的示例。我试过玩弄:
{queryParams: { pass an array here! }}
Run Code Online (Sandbox Code Playgroud)
但是如果我在 key:value 对以外的地方放了任何东西,我的 IDE 就会注册一个错误。
我可能每次都可以添加所有可能的过滤器及其值,但是每次都会创建一个非常长的 URL 字符串,大多数值为空白或 All 等,不是很漂亮。
所以我认为我的工作流程应该是在发送端我维护一个包含所有过滤器及其状态的数组,然后每次点击一个过滤器按钮时,我首先更新数组中的相关值,然后传递整个数组通过查询参数。
在接收端,我必须以某种方式接收和处理 Param 作为数组,然后将每个条目提取为变量,然后在过滤器中进行处理。我也想要 DRY,所以真的不希望接收端的几个语句有效地为不同的属性做同样的事情,简单地说,循环遍历数组更有意义。
我希望这是有道理的,如果有人提出建议,我将不胜感激,即使这意味着以不同的方式传递数据。例如,我目前正在查看是否可以通过创建单独的过滤器服务并使用 @Input 传递数据来传递数据。
感谢收到任何想法(自学的业余爱好者,所以可能会遗漏一些明显的东西!)
谢谢
托尼
typescript angular2-routing angular2-services angular2-router angular