[英]Adding chat with node.js to existing php website
我有一个使用apache / mysql / php在共享服务器上运行的网站。 该站点的每个页面都属于一个注册用户,该用户一旦登录即可编辑该页面。 不是该页面所有者的其他用户只能查看这些页面,而不能做其他任何事情。
现在,我计划将聊天功能添加到我的应用程序中。 基本思想是,如果页面所有者在浏览器中将其打开并登录,则其他用户(将是匿名用户)会将其显示为“可用于聊天”。 访问该页面的其他用户将能够向他发送消息,反之亦然。 匿名用户不需要彼此通信,并且只能与注册用户(页面所有者)通信。 因此基本结构如下所示:
匿名用户访问页面。 该页面的注册所有者不在同一页面上,并且无法进行聊天。
注册所有者登录并在浏览器中打开其页面。 实时通知所有注册用户,所有者现在可以聊天。
匿名用户可以向他发送消息。
注册用户收到消息并可以回复每个用户
其他用户可以随时加入并与注册用户聊天。 这一切都是实时发生的,注册用户可以看到谁来访问他的页面然后消失。
现在,在步骤3和4中,我需要知道注册用户是否仍在登录。如果是,则可以将消息进一步传递给目标用户。 如果不是,那么我需要发送一条消息,通知所有者(注册用户)不再可以聊天。
我正在寻找有关如何最佳实施的建议:
使用老式的php和ajax调用。 因此,每个用户大约每秒钟都会向服务器发送一个ajax请求,服务器将以某种方式跟踪每个对话。 我认为相对容易实现。 我不希望有大量的用户,但是我可以想象这将对服务器造成沉重的负担。
使用node.js。
现在我的问题是:
上面的解决方案1可能有问题。 在不断向其抛出ajax请求的服务器上,这太重了吗? 我可以接受的用户数量是否合理?
在共享主机上使用node js ..假设可以安装它并在单独的端口上运行,我该如何最好地检查注册用户是否仍然登录? 任何想法都将不胜感激。
没错,PHP / Ajax调用会导致大量的服务器负载,特别是如果您的Apache / PHP堆栈需要大量内存来引导时。 实际上,PHP系统中的许多聊天模块(例如Drupal)都将此职责转移到了专门的node.js服务器(您提到的第二种方法)上,以方便扩展。
您可能考虑的另一种方法是使用诸如PubNub之类的实时网络来促进此用户到用户的数据传输。 PubNub有一个名为Presence的工具包,可以帮助告知每个频道的订阅者或取消订阅者。
为了满足您的要求,我想每个用户都可以通过在您的JavaScript中发出以下调用,在登陆时浏览的页面进行注册:
<script src="https://cdn.pubnub.com/pubnub.min.js"></script>
<script>
var pubnub = PUBNUB({
uuid : '12345-page35' //You can define this for each user
})
pubnub.subscribe({
channel : 'site-wide-chat,page35', //Subscribe to two channels!
message : receive_chat, //Callback function
presence : user_joined //Callback function
})
</script>
当“所有者”登录时,将通知其他用户查看该页面。 您可以这样完成:
function user_joined(event) {
if (event.uuid.match(/page35/)) { //You can set your own test here
// .... admin available for chat
}
}
Presence还具有许多漂亮的功能,例如让所有用户订阅当前频道的功能:
pubnub.here_now({
channel : 'page35',
callback : function(m){console.log(m)}
});
我希望这可以帮助您构建最小的可行产品。 由于所有内容都是在编程语言级别上实现的,因此在设计可定制的聊天解决方案时应具有很大的灵活性,而又不会增加服务器的复杂性或开销。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.