【问题标题】:integrate a chat in a web-app powered by Node.js在由 Node.js 提供支持的网络应用程序中集成聊天
【发布时间】:2023-03-28 16:31:01
【问题描述】:

我正在使用 Angular(客户端)和 Node(服务器端)开发一个 Web 应用程序。我想集成一些社交功能,包括聊天。因此,用户可以发现附近的用户并向他们发送消息。 我想知道实现这一点的最佳方法。我有一个想法,但在我看来它非常原始,我担心它会导致服务器过载。

  1. 我的想法是每分钟从客户端发送一个请求到 关于新消息的服务器

  2. 服务器在 该用户的所有对话,检查最后一条消息 每次对话的时间

  3. 服务器发回对话 有新消息

  4. 如果客户端收到带有新消息的对话,则 通知出现,因此用户可以打开聊天。

  5. 一旦打开聊天,对服务器的请求 每 3 秒(而不是 1 分钟)发送一次新消息

存储在 MongoDB 中的用户对话示例

{'conversations':    
 [
  {'to':{'user-id':'101010', 'name':'Michela', 'location':'Alba Adriatica', 
         'img':'http://graph.facebook.com...jpg'
         }, 
   'last-msg':12345, //epoch
    'msgs':[
            {'from-me':'ciao come stai?', 'date':''},
            {'from-you':'bene grazie, tu?', 'date':''},
            {'from-me':'eh insomma..mi so rott lu cazz', 'date':''},
            {'from-you':'dai poi vai alle Hawaii', 'date':''}
           ]
   },
   ...
 ]
}

【问题讨论】:

    标签: node.js mongodb chat


    【解决方案1】:

    您确实应该了解 websocket 以及它们如何提供“推拉”信息。

    您建议的方法称为“长轮询”。是的,如果两者之间的时间不是很长,那么如果客户端数量增加,服务器就会承受很大的负载。

    使用 websocket,您可以让服务器仅与实际需要信息的客户端进行通信。

    在 Google 上搜索“node.js 聊天应用教程”。没那么难。

    【讨论】:

    • 所以,我可以为打开聊天的用户使用套接字,并使用“长轮询”来检查是否有人发送了新消息。使用套接字,我仍然可以同时为多个用户提供服务吗?我的意思是,如果有很多用户聊天,服务器可以处理许多打开的套接字?比你
    • 你必须明白这是两个完全不同的东西。使用 websockets,您可以处理大量流量,但如果您想保持许多连接打开,您可以使用混合系统。当客户端处于活动状态时使用套接字,如果一段时间内没有活动,则关闭套接字并开始每 5 分钟左右进行一次长轮询以检查新消息。聊天应用程序是学习 websockets 的一个非常基本且很好的模型。请遵循一些简单的nodejs教程,你就会明白
    猜你喜欢
    • 2011-11-05
    • 2023-04-03
    • 1970-01-01
    • 2019-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多