Javascript 将通知推送到另一个用户

Javascript 将通知推送到另一个用户,javascript,Javascript,这个问题不是代码级别的问题,只是功能问题/头脑风暴 在我的PHP脚本中,我想实时向另一个用户发送通知,我想到了一种方法,如果你知道更好的方法,请务必在评论中留下它们 我对该功能的想法是,将用户id和消息插入数据库表中,然后在用户端不断循环一个select请求,在$\u会话中查找与其id相对应的通知,如果找到消息,则从表中删除它并将其显示给用户 这似乎会使我的数据库“紧张”,我想知道是否有更干净的方法来做到这一点,如果有人能在其中发布一个延迟3秒的javascript循环和一个php文件的ajax

这个问题不是代码级别的问题,只是功能问题/头脑风暴

在我的PHP脚本中,我想实时向另一个用户发送通知,我想到了一种方法,如果你知道更好的方法,请务必在评论中留下它们

我对该功能的想法是,将用户id和消息插入数据库表中,然后在用户端不断循环一个select请求,在$\u会话中查找与其id相对应的通知,如果找到消息,则从表中删除它并将其显示给用户

这似乎会使我的数据库“紧张”,我想知道是否有更干净的方法来做到这一点,如果有人能在其中发布一个延迟3秒的javascript循环和一个php文件的ajax post,我将不胜感激

谢谢大家


詹姆斯

更干净的方法是使用WebSocket。轮询、长轮询和流式处理正是您认为会遇到的问题

邮件收件人需要通过广播收听,也可以通过WebSocket收听。服务器将通知所有侦听该特定事件的WebSocket

您不希望数据库读写阻塞。只需从一个用户执行操作,并将其发送到侦听该事件的所有其他WebSocket(另一个用户的客户端实例)


对于事件历史,你会考虑坚持到一个带有消息队列的数据库。

< P>更干净的方法是用WebSoCube。轮询、长轮询和流式处理正是您认为会遇到的问题

邮件收件人需要通过广播收听,也可以通过WebSocket收听。服务器将通知所有侦听该特定事件的WebSocket

您不希望数据库读写阻塞。只需从一个用户执行操作,并将其发送到侦听该事件的所有其他WebSocket(另一个用户的客户端实例)


对于事件历史,你会考虑用一个消息队列保存到一个数据库。

< P>一个适当索引、结构良好的表,它根本不会是对数据库的一种压力。当然,这是假设你的时间间隔是合理的(你提到的3秒很好)。这就是所有实时会话检查网站的工作原理。那些需要更多信息的系统,如聊天系统,基本上是任何更频繁和/或在更大数据包中传递数据的系统,他们使用。

有了一个索引正确、结构良好的表,数据库就不会感到紧张。当然,这是假设你的时间间隔是合理的(你提到的3秒很好)。这就是所有实时会话检查网站的工作原理。那些需要更多信息的系统,如聊天系统,基本上是任何更频繁和/或以更大数据包传递数据的系统,他们使用。

使用或

只是一个想法:

  • User-1向服务器发送消息
    {“message”:“hello”,“target”:“User-2”}
  • 服务器检查消息并将其重定向到目标用户
  • User-2侦听来自Websocket或服务器发送事件的事件
  • 使用或

    只是一个想法:

  • User-1向服务器发送消息
    {“message”:“hello”,“target”:“User-2”}
  • 服务器检查消息并将其重定向到目标用户
  • User-2侦听来自Websocket或服务器发送事件的事件

  • Websockets,我会查这个的,你能不能缩小我应该找什么样的东西,顺便说一句,谢谢response@iJamesPHP“php websockets”将是一个开始,然后您将需要一个允许打开websockets的客户端框架。每个浏览器都可以有自己的WebSocket语法,因此使用专门为其设计的[javascript]框架将非常有效。我正在考虑删除我的答案,WebSocket是未来的发展方向+1 WebSockets,我会查这个的,你能不能缩小我应该找的东西的范围,顺便说一下谢谢response@iJamesPHP“php websockets”将是一个开始,然后您将需要一个允许打开websockets的客户端框架。每个浏览器都可以有自己的WebSocket语法,因此使用专门为其设计的[javascript]框架将非常有效。我正在考虑删除我的答案,WebSocket是未来的发展方向+1是的,我想,我可能会把它设置为5秒,因为我不需要那么快,WebSocket看起来很有趣,我打算做一个关于它们的小项目来学习,但直到现在,我想我会采用数据库轮询方法。是的,我想得越多,我越觉得这种方法可以被认为是“老式的”现在,web套接字几乎无处不在,但是是的,在您了解更多关于它们的信息之前,使用标准轮询方法是安全的。您平均预计会有多少用户?最多50个,所以在服务器上以5秒的间隔执行50个请求不算什么,我会毫不犹豫地执行。我假设你使用MySQL,但如果你想在I/O上节省更多,你可以使用Redis来存储和读取消息(但要小心,它不是持久性的)。是的,我想,我可能会把它放在5秒钟,因为我不需要那么快,websockets看起来非常有趣,我将做一个关于它们的小项目来学习,但是直到现在我想我会采用数据库轮询方法是的,我越想,我越觉得这种方法可以被认为是“老式的”,因为现在web sockets几乎无处不在,但是是的,直到你了解更多关于它们的信息,使用标准的轮询方法是安全的。您平均预计会有多少用户?最多50个,所以在服务器上以5秒的间隔执行50个请求不算什么,我会毫不犹豫地执行。我假设您使用MySQL,但是如果您想在I/O上节省更多,您可以使用Redis来存储和读取消息(但要小心)