zkfire

分布式即时聊天服务器
授权协议 Apache
开发语言 Java
所属分类 服务器软件、 电话/通讯/IM聊天
软件类型 开源软件
地区 国产
投 递 者 辛建业
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

zkfire = zookeeper+openfire(3.8.1) 
   Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议,您可以使用它轻易的构建高效率的即时通信服务器. 
  根据对xmpp与openfire的理解,我在openfire中相应的地方植入少量的代码,并把zookeeper包也一并打包到zkfire中。使用zookeeper(http://zookeeper.apache.org/)管理集群中的节点。
  客户登陆集群中的不同服务器进行通信就如登陆同一台服务器一样。
  openfire自身也有一套集群的实现,使用了oracle 的coherence的中间件,使用时要自己加入相应的jar包与集群插件。
  之所以又自己开发了一套集群实现,一个是给集群提供多一些选择,一个是兴趣^_^,让openfire天然就支持集群
  
  zkfire使用的场景:
  zkfire中有zookeeper的服务器监听与客户端连接程序,但可以不依赖自身的zookeeper服务,可以在openfire之外另外开启其他zookeeper服务,此时只需指定
  cluster.xml配置文件中zClient节点的连接地址即可。
  如果只是zookeeper单机服务,那么所有openfire服务器只需要连到同一个zookeeper服务器就可以完成openfire的集群
  如果是zookeeper集群,根据zookeeper的集群特点,集群中节点不应该少于3台。如果超过一半的zk节点宕机,那么整个集群境将不能正常的工作。
  
  使用方法:
  将zkfire.jar包替换lib下的openfire.jar,之所以命名zkfire.jar只是为了易于区分,名字可以随意取。并将cluster.xml放到bin目录下。
  zkfire基于单openfire的实现,所以如果使用的话建议不要开启openfire自身的集群功能。
  在安装的openfire目前bin下,放入cluster.xml文件。
  示例内容如下: 

  <?xml version="1.0" encoding="UTF-8"?>
   <jive>
        <!-- 该节点用于openfire服务器之间通讯。IP为本机IP地址,需其他服务器能访问到 -->
<notice>10.10.152.180:3004</notice>
         <!-- zoo节点用于配置zkfire的zookeeper服务。如果用其他zk服务器,那么这个节点可以去掉。-->
   <zoo> 
             <tickTime>2000</tickTime>
             <initLimit>10</initLimit>
             <syncLimit>5</syncLimit>
             <dataDir>E:/zoo/data</dataDir>
             <clientPort>3181</clientPort>
              <server name="server.1">10.10.152.180:2888:3888</server>
              <server name="server.2">10.10.152.185:2888:3888</server>
              <server name="server.3">10.10.152.189:2888:3888</server>
              <myid>1</myid>
   </zoo>
        
      <!-- 该节点用于连接zk服务器,如果连接zkfire自身的zk服务器,那么该节点可以去掉 -->
     <zClient>127.0.0.1:3181</zClient>
   </jive>

 zoo中的节点server用于配置zookeeper的集群,myid指定本身zookeeper服务器的myid值,server.X 这个数字就是对应myid中的数字,集群中不同zk服务器的myid值不同。
   zoo中其他节点的内容皆对应zk配制文件的键值内容。这里不再详述,可以参考 http://rdc.taobao.com/team/jm/archives/665,但dataDir与clientPort是必须配置,用于指定zookeeper数据文件地址与监听端口。   

有任何问题请随时email给我donnie4w@gmail.com

  • 软件简介 zkfire = zookeeper+openfire(3.8.1) Openfire 采用Java开发,开源的实时协作(RTC)服务器基于XMPP(Jabber)协议,您可以使用它轻易的构建高效率的即时通信服务器. 根据对xmpp与openfire的理解,我在openfire中相应的地方植入少量的代码,并把zookeeper包也一并打包到zkfire中。使用zookeeper(http

 相关资料
  • 8.10. 示例: 聊天服务 我们用一个聊天服务器来终结本章节的内容,这个程序可以让一些用户通过服务器向其它所有用户广播文本消息。这个程序中有四种goroutine。main和broadcaster各自是一个goroutine实例,每一个客户端的连接都会有一个handleConn和clientWriter的goroutine。broadcaster是select用法的不错的样例,因为它需要处理三种

  • 主要内容:服务端程序,客户端程序本节将带领大家结合咱们前面所学的知识开发一个聊天的示例程序,它可以在几个用户之间相互广播文本消息。 服务端程序 服务端程序中包含 4 个 goroutine,分别是一个主 goroutine 和广播(broadcaster)goroutine,每一个连接里面又包含一个连接处理(handleConn)goroutine 和一个客户写入(clientwriter)goroutine。 广播器(broa

  • 问题内容: 我正在尝试使用Redis Cookbook示例: 我在这里取得了成功,但从未得到“消息”。 我的客户端index.htm是这个 客户如何发布到特定的Redis“聊天”频道。 问题答案: 如果您在node.js程序中使用Redis发布/订阅功能,则应使用一个Redis客户端连接来监听某个频道,使用另一个Redis客户端连接来发送常规命令和/或将消息发布到您的频道。从node_redis文

  • 我正在学习如何与gRPC建立聊天服务。我注意到,大多数示例都将订阅者的所有连接存储到一个列表数据结构中。当聊天室收到新消息时,服务器将循环浏览该列表并发送新消息。 将订阅者存储在源代码的可变订阅者中。 我的问题是,当订阅者数量增加并将所有订阅者存储在HashMap中似乎是个坏主意,因为这会消耗太多内存?我尝试将这些连接存储在Redis中,但由于连接不可序列化,这可能是不可能的。 我的想法是在Kub

  • 问题内容: 您将使用哪种分布式锁定服务? 要求是: 可以从不同的进程/机器看到的互斥(锁定) 锁定…释放语义 超时后自动释放锁-如果锁持有人死亡,它将在X秒后自动释放 Java实现 很高兴拥有:.Net实现 如果免费:死锁检测/缓解 易于部署,请参阅下面的注释。 我对诸如“可以通过数据库完成”或“可以通过JavaSpaces完成”之类的答案不感兴趣-我知道。我对现成的,现成的,经过验证的实现感兴趣

  • 链接 Web API Controllers 动态WebApi层 集成OData 集成Swagger UI ASPNET Core 集成OData

  • 我正在使用PHP,MySql和Node.js(socket.io实时聊天)像facebook这样的聊天应用程序。问题是当20个人开始聊天时,我的服务器负载会上升到10-15。我只是在发送方插入消息,并向接收方发送消息ID,接收方从数据库检索消息信息。我有一个Centos服务器有4个物理和4个逻辑核心(共8个核心)和16GB内存。我的网站是在zencart中构建的,当我在静态页面上按f5 1分钟时,

  • 我需要在netty中有一个客户机/服务器通信,用于我的项目目的之一。所以我刚开始用一个handsOn来改进,我正在学习netty,我是一个初学者。 我尝试了一个简单的客户端服务器与Netty聊天。 客户端和服务器正在初始化,我可以看到服务器能够获得用于建立连接的客户端管道,但是当客户端发送消息时,它没有进入ServerAdapterHandler的messageReceived部分。下面是我的源代