做消息推送使用Websocket与ajax定时刷哪种更耗性能???

项目开发中遇到有推送消息的地方,需要实时或者伪实时的推送,我给后端建议用websocket,后端觉得搭建websocket会很耗服务器性能,让我就定时刷就行了。。。。

求解,是否websocket很耗性能?

阅读 17.8k
2 个回答

WebSocket 的性能完全高于 Http,一次WebSocket连接其实就是一个Http请求,而轮询每一次都是Http请求。况且现在的一些框架随随便便都可以做到百万级量。

WebSocket 最核心的是服务端的被动性,因为对于Http请求而言,每一次都是一个request和response,而对于WebSocket可以是:“小弟,你有人给你发了条消息喔你收一下!”,而无须我隔一段时间向服务端问一下:“老头,有消息吗?,有消息的话你给我”;要知道一次Http所带的信息很重(Cookie\Header etc)的好吧。

那么问题来了,你们后端不愿意做,只有一个原因:。轮询多简单呀,后端什么都不用改,WebSocket 我后端还要给你搭一个,要是.NET还好,几行代码也就搞定了。

WebSocket是用的长连接。

哪种更耗性能,我觉得这不是关键所在,你没有描述清楚你的ajax轮询的频率和你具体应用在哪一方面?Websocket对于延时性要求很高的应用来说自然是非常好的选择,但同时Websocket是html5引入的新特性,如果你使用的浏览器还是ie8,那就根本不用考虑这个问题了。Ajax轮询,对浏览器兼容性友好,实现起来更加容易,业务结构清晰,如果你的业务压力不大的话,用Ajax轮询就行了。

Websocket的性能损耗取决于你服务端语言的选型和实现细节,就目前来说,很多事件驱动的设计对Websocket是非常友好的,比如nodejs中的一个非常有名的模块socket.io,就能很方便的实现Websocket服务端业务,对于中小型的应用来说,结合其他缓存之类的技术,性能问题不大。同样的,如果你只会PHP,你可以选择使用swoole,同样的事件驱动的设计模型。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏