通知系统-套接字.io或Ajax



我正在使用Laravel5,我想为我的(web)项目创建一个通知系统。我想做的是,通知用户新的通知,比如;

  • 另一个用户开始跟踪他,
  • 另一位用户在他的墙上写道,
  • 另一个用户给他发送消息等,

(通过可能在标题上突出显示带有下拉菜单的图标)。如StackOverflow).

我发现了Laracast的新教程:Real-time Laravel with Socket。使用Node、Redis和Socket.io实现了类似的功能。

如果我选择使用socket。io和我有5000个在线用户,我假设我必须建立5000个连接,5000个广播加上通知,所以它会产生很多请求。我需要在主刀片上为每个登录用户开始,对吗?

这样做不好吗?我也认为同样的事情可以用Ajax请求来实现。我应该避免使用太多的连续ajax请求吗?

我想问是否Socket。io是创建这种系统的一种很好的逻辑方式,还是在5秒内使用Ajax请求是一种更好的方法?或者有没有其他更好的方法?push也可以是另一种选择,但是我认为免费对我来说是更好的选择。

几点思考:

  1. Websockets和Socket。IO是两回事

    插座。io可能会使用Websockets,它可能会退回到AJAX(在不同的选项中)。

  2. Websockets更web友好和资源有效,但他们需要工作,就编码和设置而言。

    在Websockets中使用SSL也是非常重要的,有很多原因,一些浏览器要求SSL证书是有效的…因此,这可能是要付出代价的。

  3. Websockets有时即使在浏览器支持的情况下也无法连接(这是建议使用SSL的一个原因)…因此,为遗留问题或连接性问题编写AJAX回退意味着Websockets的编码通常不会取代AJAX代码。

  4. 5000个用户在5秒内是每秒1000个新连接和请求。有些应用程序无法处理每秒1000个请求。这不应该总是这样,但这是一个足够普遍的问题。

    用户越多,AJAX的行为就越像DoS攻击

    另一方面,Websockets是持久的,没有新的连接-这是一个很大的资源问题-特别是考虑到TCP/IP的慢启动特性(是的,这是一个特性,而不是一个bug)。

    即使新客户端被拒绝,现有客户端也不应该遇到DoS(服务器设计可能会影响这个问题)。

  5. Heroku dyno应该能够处理5000个Websocket连接,并且仍然有更多的空间,同时仍然响应常规的HTTP请求。

    另一方面,我认为Heroku施加了每秒活动请求和/或每个动态的积压限制(每个约50个请求)。这意味着如果超过一定数量的请求正在等待第一次响应或等待您的应用程序接受连接,则新请求将被自动拒绝....因此,您必须确保每次有不超过100个新请求。对于每秒1000个请求,您需要您的并发性允许100个同时请求,每个请求10毫秒作为最小性能状态…这在本地机器上可能很容易,但是当网络延迟开始时,就很难实现了。

    这意味着当使用AJAX时,运行在一个Heroku Dyno上的Websocket应用程序很可能需要多个Dynos。

这些只是你在选择方法时可能要考虑的事情,不管你使用什么gem或框架来实现你的方法。

将应用程序的某些部分(如推送通知)外包,将需要考虑其他因素,例如可伸缩性管理(您节省了哪些资源?)与价格等。

相关内容

  • 没有找到相关文章

最新更新