套接字.为大量用户提供可靠的聊天服务器,如果是,您的堆栈是什么?
Is Socket.IO a reliable Chat server for large number of users, if yes what's your stack?
我读了很多关于Socket的博客。我最近接触过它,对它的特点印象深刻。我计划使用它的聊天应用程序之一,并为正常数量的用户与最小数量的用户它是完美的工作。但是在Socket中有什么缺陷吗?IO在生产网络中使用时?套接字。IO最适合消息流非常大的大规模消息传递系统。如果是,那么沿着Socket使用的最佳技术堆栈是什么?IO使其工作"100%可靠,即使负载更多"。任何人都已经有了Socket的经验。实现大规模消息传递系统的IO。我想使用的堆栈是套接字。IO, Redis, Cassandra and MySQL.
到目前为止,我已经看了很多Socket的例子。我和很多人都在尝试用不同的方式去做。有些人使用Array来存储Socket id,而有些人使用Redis。我知道使用Redis肯定会有帮助。但我不想就此打住。我想学习Socket的最佳架构。IO程序。请给我一个路径。
编辑
对我来说,最好的堆栈只不过是失败率比其他堆栈低的东西。
首先需要理解这个Socket。IO仅仅是WebSocket协议的一个抽象,而且是一个非常优雅的抽象。由于它享有令人难以置信的支持,当您需要在服务器和客户端之间通过公共网络进行双向通信时,该协议本身可能是您今天可以做出的最佳选择,因此您肯定走在正确的轨道上。
操作套接字所需的资源。IO服务器主要围绕在任何给定时间点上的连接总数和传输的数据。话虽如此,一个插座。IO服务器绑定到网络I/O,并将扩展到您的网络硬件可以处理的尽可能多的客户端。
值得考虑的是Socket。IO是建立在异步网络库之上的。阻塞来自其他服务的I/O被延迟,使服务器能够继续处理其他通信。内存占用通常包含连接的内存表示和正在传输的即时数据——即使一个客户端可能将兆字节的数据中继到其他客户端,它也会以离散块的形式流式传输数据,一旦一个块成功地传输到所有各方,资源就会立即释放。
当然,即使在管理直接的通信时,比如跨多个房间的多个用户之间的聊天消息,也不可能扩展到像Freenode这样的规模,它可以在数千个房间中拥有数十万用户,只有一台服务器。
这就是像Redis这样的服务发挥作用的地方,你可以使用一个高可用的中央存储来存储一些中间的、有代表性的连接数据,通过无缝地分布在几个Socket上的客户端来水平扩展。IO实例。今天你可以获得99%以上的可靠性,通过使用像CoreOS这样的堆栈来描述你的架构的每个不同部分,作为可以分布在可用硬件上的单元,随着负载的增加引入新的实例,像etcd这样的服务在这些启动或突然变黑时进行发现,以及像hipache这样的分布式WebSocket代理来保持你所有的Socket。IO实例饱和,但从不允许任何实例耗尽所有可用资源。
- 如果 a 为 false,则 if(a) === if(false)
- RegEx删除空属性?例如,如果(class=“”||class=“”)移除;否则就下课
- 如何在angularJS中编辑时,如果DB中的值为true,则设置复选框,如果值为false,则取消选中复选框
- 如果使用 lodash 将属性存在于另一个对象中,则向对象添加属性
- 如果文本字段为空,则使用JavaScript应用CSS样式
- Rails File_field最大堆栈大小
- 如果我在javascript中输入无效的电子邮件或空白,如何显示特定的文本框边框红色
- 如果href包含X,请更改href
- 如果localstorage为空,则显示欢迎消息
- d3中堆栈函数和嵌套函数之间的差异
- 是什么让一个“;Uncaught RangeError:超过了最大调用堆栈大小“;错误(Chrome,在其他浏览器中显示
- 点击后隐藏潜水?(但如果Div是一面旗帜呢?)
- 如果元素's的ID以数字开头
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- Jquery模板,如果xx&&如果yy
- 如果值为空,如何设置输入的默认值?jQuery
- 如果选中了多个复选框,如何添加事件
- 如何检查元素的内容是否为空,如果为空,请在jquery中删除该元素
- 如何知道元素在屏幕上是否可见.如果没有,请滚动页面
- 套接字.为大量用户提供可靠的聊天服务器,如果是,您的堆栈是什么?