实时推送

socket.io搭建分布式web推送服务器

痞子三分冷 提交于 2019-12-07 13:06:45
socket.io是目前较为流行的web实时推送框架,其基于nodejs语言开发,底层用engine.io实现。 借助nodejs语言异步的特性,其获得了不错的性能。但单个实例的socket.io依然承载能力有限,最多只能容纳3000个long-polling方式的客户端进行连接。 将socket.io进行分布式扩展的难点有两处: 1. 进行负载均衡时客户端 必须保证始终连到一个节点上 如果客户端采用 long-polling长轮训 方式进行连接,则每次轮训都会产生一个新的请求,若不进行限制。就有可能连接到集群内新的 socket.io节点上,导致异常的发生。 解决方法: 使用nginx的ip_hash实现session sticky ,让客户端始终连接到集群内一台节点上。 2. 多个实例之间的消息推送 当集群内某台节点想要向连接到集群的所有客户端发送消息时,某些客户端因为负载均衡时ip_hash可能被分配到了其他的节点上,这时就需要向其他节点发布推送消息,让其他节点的同时向客户端进行推送。 解决方法: 使用redis的发布与订阅功能与 socket.io-redis开源库 ,该库在节点向客户端群发消息时会将该消息发布到redis的订阅队列中,让其他节点能够订阅到该消息,从而实现节点间消息推送。 上图是采用该架构的一个聊天服务器集群示例,每个chatnode相当于一个socket

CshBBrain的安装配置运行和测试

房东的猫 提交于 2019-11-28 17:35:49
安装配置运行 1.项目的安装 从http://code.google.com/p/cshbbrain/downloads/list 下载源代码包,解压。从Eclipse 导入项目。 或直接从Eclipse通过svn从http://cshbbrain.googlecode.com/svn/trunk/下载获取项目代码。在Eclipse编译项目没有错误提示即成功(项目编译要求jdk1.6及以上版本)。 2.项目的配置 2.1项目系统参数配置 项目参数文件位置:src/com/jason/config.properties 项目系统参数列表: #the port of the server #服务器所使用的端口 port=9090 #the priority of the thread in pool #服务器工作线程的优先级,使用默认优先级即可 maxPriority=5 #the tmp folder #服务器使用的默认临时文件夹 tmpRoot=e:/tmp/ #the factor of the work process thread per CPU kernel #业务处理线程CPU内核因子,例如设置为5则表示每个CPU核将创建5个处理线程,如果你的服务器有4个内核,那么将创建5*4=20个处理线程 requestWorker=5 #the factor of the read