存档

2010年2月 的存档

CentOS 5 安装 Opnfire

2010年2月26日 admin 没有评论

1,安装GCC
yum -y install gcc
yum install flex autoconf zlib curl zlib-devel curl-devel bzip2 bzip2-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel

2,安装php、mysql
yum -y install php mysql mysql-server php-mysql

3,启动mysql服务

service mysqld start

进入MYSQL创建数据库:  mysql -u root -p;

crate database conjs;

4,安装apache扩展

yum -y install httpd-manual mod_ssl mod_perl mod_auth_ mysql

5,安装php的扩展

yum -y install php-*

6,安装 mysql扩展

yum -y install mysql-*

7,安装 Openfire
[root@localhost ~]# rpm -ivh openfire-3.6.4-1.i386.rpm
Preparing…                ########################################### [100%]
1:openfire               ########################################### [100%]
[root@localhost ~]# service openfire status
openfire is not running
[root@localhost ~]#

(前提是你已经下载了 openfire 的linux 的安装文件)

开启服务 service openfire start

输入网址 http://127.0.0.1:9090 进入配置

Popularity: unranked [?]

分类: JAVA 标签:

SFS 关于无效连接和断线的处理操作[转]

2010年2月24日 admin 1 条评论
相信做网络游戏开发,出现无效连接和 断线情况是经常遇到的。在sfs 1.63里面,提供<MaxSocketIdleTime>标签,更新文档描述为最大的超时连接时间,但是测试老是不起作用。

这 里提供另外一个很简单的方法,经测试有效。

1. 在config文件里面设置<MaxUserIdleTime>标签为60,也就是一分钟。
2. 在客户端写一个TimeEvent事件,每30秒执行一次 sfs.sendXtMessage(extName, “dummy”, {})  方法。

MaxUserIdleTime> :标签的意义是,设置一个最大的用户空闲时间 如:2分钟。
sfs.sendXtMessage(extName, “dummy”, {})  :每1分钟用该方法发送一个很小的数据到服务器端,以保证客户端和server端保持连接。 如果客户端掉线。如果服务器端检测到掉线,会踢掉该user对象。 如果服务器端没有检测到掉线(如:你拔网线,就可以造成这种情况)。 这种情况下,服务器会以最大限制时间,踢掉该user对象。 不然该user对象,会像幽灵一样存在在服务器中。

Popularity: unranked [?]

smartfoxsrver 优化总结[转]

2010年2月24日 admin 没有评论

1 使用 string 格式的数据传送协议
2 关闭房间人数更新广播 uCountUpdate = flase
3 单机游戏房间 使用 普通room 但是请将 isGame=false limbo=true ountUpdate=false;
4 扩展使用java扩展,使用功能模块化。 尽量减少扩展的个数
5 进行 MaxRoomVars 和 MaxUserVars 的设置
6 使用 服务器版本的java虚拟机
7 修改JVM的堆内存 在start.bat 里 “..\jre\bin\java.exe” -Xms64M -Xmx512M  -cp
不然超过堆 内存 sfs 会断开
8 关闭不需要的系统事件及方法。
9 像企鹅那种应用 一个smartfoxserver可开设3个zone 一个zone设定1000人左右
10 将扩展的名字设置短些 1~2个字符
11 最好使用自定义的接口。如 公聊 私聊 等等
12 使用最新的java虚拟机
13 使用单个zone级别的扩展。代替多个room级别的扩展
14 如果使用as写扩展,用java写一部分代码,然后在as中使用。
15 尽量减少外部数据库的访问
16 服务器端 JVM 线程的设置 线程数=cup的个数/2

Popularity: unranked [?]

flash10使用RTMFP 开发点对点项目

2010年2月12日 admin 没有评论

通过Stratus 服务器在Flash Player中使用RTMFP 开发 点对点应用

Adobe Flash Player 10 和 Adobe AIR 1.5 引入了一个新的通讯协议,Real-Time Media Flow Protocol (RTMFP),其低延迟,端到端的对等功能,安全性和可扩展性使它特别适合开发实时协作应用,不仅提供卓越的用户体验,而且运营商降低成本。

早前的Flash Player 版本使用Real-Time Messaging Protocol (RTMP) 需要Adobe Flash Media Server (FMS)提供合作应用(例如 Adobe Acrobat Connect Pro)或者音频视频流。RTMP是streaming media, shared objects, 和 remoting连接的卓越选择,它满足实时性要求的交互式音频和视频通信的能力有限。

为了能够使用 RTMFP,Flash Player 客户端必须连接到一个支持RTMFP协议的服务器,例如Adobe Stratus beta 服务器或者是新版本的FMS。Stratus 是一台用于Flash Player 客户端间通信的主机。不同于FMS, Stratus 不支持视频转播,shared objects,脚本,等。因此,使用Stratus,只可以开发Flash Player的客户端直接相互交流的应用程序。

Flash Player 已经在web视频领域占有重要的市场份额。由于采用RTMFP和先进的媒体压缩技术,将有利于Flash Player 10处于实时通信的领先地位。

在这篇文章中,我首先强调在即时通讯领域使用RTMFP的优势。其次,我将要介绍直接管理点对点RTMFP管理所对应的新 的ActionScript 3.0 API。最后,我介绍我们的VideoPhone应用实例。

Requirements

要求

为了使用文中的文件,你需要以下软件和文件:

Flex Builder 3

注意:请按照Introducing Flex SDK 3.2 and Flex Builder 3.0.2指南中的方法去安装Flex Builder 3.0.2.这里面包括Flex SDK 3.2, 这是为了建立 Flash Player 10应用。尽管你也可以使用Adobe Flash Professional CS4 作为开发工具,但这篇文件指导你如果使用Flex Builder 3建立一个简单的应用.

Flash Player 10

Sample files:

Prerequisite knowledge

预备知 识

熟悉ActionScript 3.0 和 Flex Builder 是必要的。

Benefits of RTMFP

RTMFP的好处

Real-Time Media Flow Protocol (RTMFP)是一个引入到Flash Player 10 和 in AIR 1.5新的通讯协议。同Real-Time Messaging Protocol (RTMP)的主要不同点之一是,RTMP基于传输控制协议 (TCP) 和 先前版本的Flash Player,RTMFP建立在 User Datagram Protocol (UDP)协议.

TCP提供了可靠的数据传输(也适 用于文件传输,电子邮件等) ,它没有提供任何端到端延迟保证。可靠的数据传输的TCP实现了重新传输丢失的数据,其中包括了延迟。由于尽量减少端到端延迟是实时通信 (几百毫秒的延迟可能使一个会话不可用)中最重要的一个目标,TCP是不适合用于这一目的。传输错误复原和恢复不可分割的组成部分,最先进的音频和视频压 缩技术,如Speex音频和H.264视频编解码器,可同时在Flash Player 10 。因此,可靠的交付所提供的TCP没有必要的。因此, UDP连接,它提供了一个高效,快速的数据传输,是普遍使用的实时协作应用,尽量减少端到端延迟是至关重要的。另一个优势在于 UDP连接,它使端到端的对等,也就是说,数据直接的传输客户之间后面网络地址转换( NAT ) 。

当同 RTMP做对比,RTMFP提供下列高级的即时通讯:

  • 低延迟:一但RTMFP建立起了UDP,它将给即时通讯提供最小 的延迟。重要的是要注意RTMFP提供了可靠和不可靠的服务。当在两个Flash Player 实例之间发送数据的时候(例如,使用NetStream.send()方法),可靠的数据传输被使用。当在两个Flash Player 实例之间发送Speex 音频的时候,不可靠的交互方式被使用,以提供最小的延迟。
  • 点对点媒体传输: 媒体直接发送给两个Flash Player的情况下,不通过路由,而是通过一个中央中继服务器。当同RTMP相比发现,在所有通过Flash Media Server传送的数据, RTMFP不仅进一步降低了端到端的延迟,而且也消除了中央数据中继的相关开销,因此,有助于自身的可扩展性部署。
  • 数据的优先次序:音频传输具有较高优先于视频和非时间关键数据(如即时信息等) 。这可以通过带宽通信通道的限制大大提高在用户体验。

所有这些功能代表了应用于实时通信的巨大优势,提供了一个极大的用户体验,其成就比早期版本的Flash播放器的效应更为巨大。

Firewall traversal

穿越防火墙

RTMFP是建立在UDP连接的基础上, 使客户端直接的通信,即使它们位于NATs(译者注:是一个网络协议允许客户端后面的NAT (网络地址转换) ,以找出其公共地址,类型的NAT是延迟和互联网方面的端口相关的网络地址转换,尤其本地端口。此信息是用来建立UDP连接(用户数据报协议)之间的沟通 两个主机都是延迟的NAT路由器。该议定书是指在RFC 3489)或防火墙。为了RTMFP工作,您的防火墙必须配置为允许即将发出的UDP通信。大多数的消费者或小型办公室/家庭办公室( SOHO )的防火墙是这种情况,许多企业防火墙完全阻止UDP通信。

一种解决办法是配置的Flash Player使用转向代理 (遍历周围可用的NAT ) 。 Flash Player的支持IETF的因特网草案draft-ietf-behave-turn-08。如果网络管理员配置转向代理,允许即将发送的UDP连接, Flash播放器可以增加在mms.cfg的配置(更多的信息Flash Player的配置和位置mms.cfg ,请阅读Adobe Flash Player的管理指南的Flash Player 10 ) :

RTMFPTURNProxy=ip_address_or_hostname_of_TURN_proxy

直接UDP通信总是被尝试,转向代理只是用来作为备份:它是用于UDP通信,不能在Flash Player和Stratus (如UDP协议封锁防火墙)之间或Flash Player的端点之间流动。

即使你的防火墙使即将发送的UDP通信的用,可能和你对应 端的防火墙不能够允许通过。当一个端点设在一个所谓的“对称的防火墙, ” 的后面,端到端的通信可能是不可以实现。 (对于多种防火墙,请进入维基百科参阅 网络地址转换。 )在这种情况下,你可以使用转代理援助你防火墙穿越。

Stratus service

Stratus 服务器

Flash Player实例必须连接到Adobe Stratus service(使 用rtmfp : / / stratus.adobe.com ) ,用以彼此的通讯。 Stratus是提供会合服务的主机,帮助Flash Player实例间的互相联系,即使它们位于NATs的后面。虽然连接到Stratus服务非常相似连接到Flash Media Server,Stratus没有提供任何Flash Media Server 典型的功能(媒体中继,共享对象,远程等)。 Flash Player客户端必须保持在整个通讯期间一直与Adobe Stratus连接。为了获得Stratus,您将需要您从Adobe公司申请来的开发密钥。

RTMFP支持正在计划添加到未来版本 的Flash Media Server(无发行日期) 。这样Flash Media Server,将有可能同Flash Player 9或更早的客户(使用RTMP )通信和Flash Player 10个客户端(使用RTMFP ) 通信。

Security

安全

RTMFP 提供终端设备之间的安全通信。它的密钥采用128位AES谈判使用Diffie-Hellmann密钥 交换方法。不过,这并不提供强大的终端认证,如SSL或RTMPS 。为了帮助端点认证, RTMFP和ActionScript揭露给应用开发者secure nonces。 这些nonces可在双方沟通的Flash Player的终点,并保证比赛。通过核实这些nonces ,最终用户可以确保没有人在中间攻击。这些nonces还可以用来开发关键的连续性机制。

重要的是要注意到, Flash播放器不仅从您的麦克风和摄像头设备发送媒体,其他的Flash Player端点订阅您的媒体流。代表Flash播放器并不中继任何其他Flash Player的端点数据(如在一个多播的情况) 。

对 于更多关于RTMFP的信息,请阅读Adobe Labs 上的帮助:

ActionScript 3.0 API supporting RTMFP
ActionScript 3.0 API 支持 RTMFP

有 一个新版本的ActionScript 3.0API支持Flash Player 10的RTMFP 。连接到Stratus错服务和创造端到端媒体流的方法类似于Flash Media Server的工作方法。请注意,您必须使用的ActionScript 3.0或者Flash Professional CS4或Flex Builder 3 构建目标于Flash Player 10或AIR 1.5 。

正如我前面提到的,首先你必须连接到Adobe 公司Stratus的服务:

private const StratusAddress:String = "rtmfp://stratus.adobe.com";
private const DeveloperKey:String = "your-developer-key";
private var netConnection:NetConnection;

netConnection = new NetConnection();
netConnection.addEventListener(NetStatusEvent.NET_STATUS,
netConnectionHandler);
netConnection.connect(StratusAddress + "/" + DeveloperKey);

开发者钥匙是你通过登陆你的Adobe公司开发者帐户申请得到,这个申请在Adobe Stratus beta服 务的网站。

在成功连接到Stratus,你得到NetConnection.Connect.Success事件。失败可能有几个方面的原因。如果您提供了一 个无效的开发者或不正确的钥匙指定地址,您将收到NetConnection.Connect.Failed 。如果你的防火墙阻挡即将发送的UDP通信,您会收到的NetConnection.Connect.Failed事件后, 90秒超时。

在成功建立连接的Stratus服务中,您被分配一个独特的256位peer ID( NetConnection.nearID ) 。其他Flash Player的端点必须知道这个peer ID,以便收到您发表的音频/视频流。Flash Player或Stratus的服务是如何将这些ID在需要通讯的Flash Player客户端内传递,不在文章讨论范围内。对于交换ID ,你可以使用一个XMPP协议的服务或一个简单的网络服务,如视频电话样本应用程序。

Flash Player实例直接通讯使用单向网流渠道。也就是说,如果你想双向语音交谈,每个Flash Player的端点必须建立一个发送NetStream和 接收NetStream

首先创建一个发送NetStream

private var sendStream:NetStream;

sendStream = new NetStream(netConnection, NetStream.DIRECT_CONNECTIONS);
sendStream.addEventListener(NetStatusEvent.NET_STATUS,netStreamHandler);
sendStream.publish("media");
sendStream.attachAudio(Microphone.getMicrophone());
sendStream.attachCamera(Camera.getCamera());

这意味着,媒体作为一个端到端的流发布。由于Stratus不能中继媒体,您只可以发布端到端的流。从您的设置管理器选择本地默认设备发出的流媒体 将包括音频和视频。

注:音频/视频无法发送,直到另一Flash Player的客户端订阅您的媒体流。

现在,创建接收NetStream

private var recvStream:NetStream;

recvStream = new NetStream(netConnection, id_of_publishing_client);
recvStream.addEventListener(NetStatusEvent.NET_STATUS, netStreamHandler);
recvStream.play("media");

在这一点上,你听到声音,你可以创建一个视频对象显示视频。为了创造接收NetStream,您必须知道发布者的256 位peer ID(发布客户端的 id_ ) 。为了接收音频/视频,您必须知道被发布出来的流的名字。

Advanced topics

高级主题

发布者有良好的控制权而接收端可以接收其发布的流。当一个用户试图获得发布的流时,onPeerConnect ()方法被调用(默认简单执行返回true )对发布的NetStream。发布者可以禁止某些Flash Player的终端接收媒体:

var o:Object = new Object();
o.onPeerConnect = function(subscriberStream:NetStream):Boolean
{
   if (accept)
   {
      return true;
   }
   else
   {
      return false;
   }
}
sendStream.client = o;

在发布方, NetStream.peerStreams属性中拥有所有订阅发布的实例。例如,使用sendStream.send ()将发送相同的数据到所有用户。您可以使用下面的方法将信息发送到一个特定的用户:

sendStream.peerStreams[i].send()

NetConnection.maxPeerConnections属性指定被允许连接发布者的peer流的数量。默认值是设定为8但在实践中,这 取决于您的应用程序时,必须考虑到大多数互联网服务供应商提供非对称互联网接入服务的许可。图1说明了直接和三个Flash Player的实例通讯 。每个Flash Player客户端发送和接收两个流,建立一个完全连接网格。从互联网下载的能力普遍高于上传的能力,你必须要格外小心,不要超负荷用户终端的上行能力。

End-to-end connections using the Stratus service

图1 使用Stratus服务点对点连接

NetConnection.unconnectedPeerStreams属性是一个没有相关发布的NetStreams数组。当一个发部流同一 个订阅流相互竞争时,订阅NetStream从NetStream.peerStreams的数组中移除。

探索视频电话示例应用程序

我们已经开发了一个视频电话示例,说明 如何使用Flash Player 10的端到端能力 。它也可作为部分文章。

该视频电话示例应用程序依赖于一个用于交流Flash Player peer ID简单的HTTP服务。提供的一部分该脚本,封装在( reg.cgi ) 。这种网络服务不提供任何用户认证。在Flash播放器成功地连接到Stratus,但其peer ID的网络服务。当创建一个呼叫电话时,视频电话呼叫使用此网络服务来查找收件人的peer ID。

Adobe公司运行这一网络服务专门提供视频电话样本。当您建立自己的视频电话样本,则必须运行您自己的网络服务,并在 VideoPhoneLabs.mxml 指定WebServiceUrl 。您应该使用自己重写的AbstractIdManager类来执行自己的peer ID身份证交流机制,例如, XMPP协议,谷歌应用服务,或Facebook的框架。

下列是建立一个视频电话示例应用程序的必要步骤(更多详情,请参阅ReadMe.txt包中包含) :

1.使用主机网络服务提供的peer ID的reg.cgi Python脚本。

2. 更新的Flex Builder 3.0.2配置,并对应开发于Flash Player 10或AIR 1.5 环境下。

3. 创建一个新的 Flex 项目。

4. 添加源文件的包( VideoPhoneLabs.mxml , AbstractIdManager.as , HttpIdManager.as , IdManagerError.as ,并IdManagerEvent.as )的项目源文件夹中。

5. 调试你的项目配制为Flex SDK 3.2 同时发布对象为Flash Player 10 或 AIR 1.5.

6. 在VideoPhoneLabs.mxml文件中替换DeveloperKey为您的Stratus开发密钥。

7. 在VideoPhoneLabs.mxml文件中替换WebServiceUrl为指定的web service。

该视频电话示例应用程序使用的手机模型。呼叫建立程序执行是使用端到端 NetStream.send ()的信息。既然你可以使用NetStream.send ( )方法只对指定的NetStream,视频电话发表其他Flash Player客户端可以连接的所谓的“听众流” (在这里我们这样叫它)。当客户端(调用者)希望与客户B通讯( A呼叫B) ,他或她订阅客户B的听众流。在这一点上,客户端B的通知访问者peer ID 的来电(使用onPeerConnect ()方法) ,并订阅客户A的媒体流。通过这个媒体流,客户端A通知客户B对他或她的好友用户的名称(使用NetStream.send ( )方法) ,用户可以选择接受或拒绝呼叫。如果要求被接受,客户端B发布的媒体流和双向通信将要被成立。

何去何从

在本文中,我介绍了一些最令人激动的特点,新的RTMFP协议连同概述了新的ActionScript 3.0的API 。在阅读本文,您应该很好地理解如何使用这一革命性的协议。我希望你能利用端到端的和先进的媒体功能的Flash Player 10和AIR 1.5开发了不起的应用。

原文地址:http://www.adobe.com/devnet/flashplayer/articles/rtmfp_stratus_app.html

Popularity: unranked [?]

silverlight 3D引擎 Balder

2010年2月11日 admin 没有评论
经过几个月的艰苦努力,重构代码、API以及提高性能,Balder 0.8.8.6终于发布了。这里有一个SampleBrowser Demo演示了Balder绝大多数的功能。
新特性如下:
  • 核心引入silverlight,但是仍然保持独立平台-直接在XAML中可以完成全部的工作
  • 引入View命名空间IView接口以及 Camera摄像机概念
  • Viewport有了View属性来替代了Camera
  • 从单线程改变到多线程执行,已得到更高的效率。(现在线程间的同步还有问题,有待解决)
  • 全新优化过的绘图程序
  • 原生高度图
  • 原生立方型
  • 原生圆柱型
  • 旋转、根据节点缩放
  • DebugLevel改名为DebugInfo
  • 材质系统
  • 支持对材质的高光反射
  • 支持双面材质
  • 渲染时支持Alpha通道
  • 移除在Balder.Core.Silverlight.Controls所有的控件,他们不在需要了。
  • 在Balder.Core.Silverlight.Controls中新增NodesControl控件-datadriven nodes control with templating
  • 在Balder.Core.Silverlight.Controls中新增NodesStack控件-datadriven stacking of nodes with templating
截图:

Popularity: unranked [?]

XMPP协议分析

2010年2月7日 admin 没有评论

摘  要: 分析了XMPP协议的地址规范和数据结构,讨论了XMPP协议的工作过程和安全机制,给出了XMPP客户端程序设计中要考虑的关键问题。
关键词: XMPP  JID  XML流  认证  加密

可扩展消息处理现场协议(eXtensible Messaging and Presence Protocol,XMPP)是一种基于可扩展标记语言(eXtensible Markup Language,XML)的近端串流式即时通信协议。它将现场和上下文敏感信息标记嵌入到XML结构化数据中,使得人与人之间、应用系统之间以及人与应 用系统之间能即时相互通信。XMPP协议已被批准为互联网即时通信协议标准。
1  XMPP的地址和数据结构
1.1 实体地址
XMPP整体框架如图1所示。图中,XMPP框架的各类实体(如XMPP客户、服务器和网关等)的地址称为甲吧地址 (Jabber Identifier,JID)。JID惟一确定进行即时消息和在线状态信息通信的独立对象或实体,并可兼容其他即时通信系统(如MSN等)相应的实体标 识及其在线状态信息。其语法规则为:[节点″@″] 域名[″/″资源],其中各个域的长度不能超过1 023 字节,总长度最大为3 071字节。

域名指定了实体连接的XMPP服务器。每个可用XMPP服务器都拥有一个完整域名,域名可在域名系统(DNS)中查找;节点可表示某用户、一类应用或某项 服务,所有节点都对应一个精确的域名;资源用来识别属于用户的特殊对象(如设备或位置),允许一个用户同时以多个资源与同一XMPP服务器连接,如yb@sdpt.com/labyb@sdpt.com/chat
1.2 XMPP的数据结构
由于XMPP是基于XML的协议,因此用户可根据自己的需要定义标记,表述几乎任何一种结构化数据,并可方便地创建定制的应用或 增加功能。
1.2.1 三个顶级XML元素
XMPP定义的3个关键顶级XML元素为<message/>、<presence/>和<iq />(info/query),每个元素都可以通过属性和名字空间包含大量数据,其属性和名字空间都是XMPP的组成部分。
<message/>元素用来包含2个XMPP实体间互相发送的消息内容;<presence/>元素表示实体可用性信息,可用 性信息有“可用”和“不可用”2种;<iq/>元素用来构建2个实体间的会话,并且允许实体间来回传送XML格式的请求和响应以便取得或设置 公共的用户信息,如名字等。
即时通信中名字冲突问题使用XML的命名空间特性来解决。XML命名空间定义了一种将XML中使用的元素和属性与统一资源定位符(Uniform Resource Locator,URL)引用联系起来对元素和属性进行定义的方法。
1.2.2 XMPP的数据结构
从结构上看,XMPP有3种数据:XML流、流认证和XML节。XML流是实体交换XML元素的容器, 以<stream>开始,以</stream>结束,是通信双方采用异步方式进行数据传输的标准方法,在整个XMPP通信过程中 处于最外层;XML节是实体通过XML流传输的结构化信息单元,在XML流中以深度为1的子标记开头,并以深度为1的子标记结束,这些标记 为<message/>、<presence/>和<iq/>。XML节也可通过包含其他子元素来传送结构化信息, 是实际需要交换的信息所在地;流认证是在XML流中有关协商传输层安全协议、简单认证与安全层协议和服务器回拨认证协议完成通信认证、加密等目的的数据交 互,是XMPP安全机制的重要组成部分。
XMPP为XML流扮演通用“传输层”的角色。XML流中包含传输的认证信息和现场消息,XMPP能使数据高效路由至最合适的请求源,并最大限度地简 化客户机上的实现,使跨应用实时交流信息成为可能。
2  工作过程
(1)节点(如yb、pt)向本地服务器连接。
①XMPP用户通过开启一个从客户端到服务器端的XML流,来申请一个在服务器上的Socket连接。
SEND: <stream:stream
to=′sdpt.com′
xmlns=′jabber:client′
xmlns:stream=′http://etherx.jabber.org/streams′>
②服务器通过开启一个从服务器到客户端的XML流进行回复。
RECV: <stream:stream
from=′sdpt.com′
id=′180763465′
xmlns=′jabber:client′
xmlns:stream=′http://etherx.jabber.org/streams′>
(2)节点向本地服务器申请登录。
①用户询问登录服务器时需提供的信息。
SEND: <iq id=′2′ type=′get′>
<query xmlns=′jabber:iq:auth′>
<username>yb</username>
</query>
</iq>
②服务器回应用户,告知用户登录所需要的信息。
③用户提供所需的信息。
④服务器响应一个空的类型为“result”的iq元素,表明登录成功。
RECV:<iq id=′3′ type=′result′/>
⑤yb用户发送当前状态给服务器,表明其在线。
SEND: <presence>
<status>Online</status>
</presence>
(3)用户获得花名册,好友增加一个联系人(如yb获知朋友sd在线)。
(4)用户间发送消息(如yb向sd发送消息)。
用户发送一条消息:
SEND: <message to′sd@jabber.org′>
<body>Where are you?</body>
</message>
服务器会根据XMPP用户的会话信息加上一个源地址,这样接收者收到消息时,消息中已经包含了源地址。
(5)XMPP服务器根据目标JID中的域名查找、连接到目标服务器并进行认证(如sdpt.com使用DNS查找jabber.org,连接到 jabber.org服务器上并进行认证)。
(6)XMPP服务器jabber.org证实sd连接到该服务器上,yb被授权与sd进行通信。
(7)数据在yb与sd间流动。
(8)用户退出,退出时只需要关闭<stream>。
3  安全机制
3.1 简单认证和安全层协商机制
简单认证和安全层(Simple Authentication and Security Layer,SASL)可以为基于连接的协议加入认证机制,提供KERBEROS_V4、PLAIN和DIGEST-MD5等多种认证方法。每种认证机制 包含认证机制名、认证过程初始化命令、认证控制命令、特定8位码和解释器等信息。
在认证过程中,认证服务器完成认证、授权标识传送、简单认证和安全层协商3个方面的工作。在XMPP中,SASL处理步骤如下(C:客户 端,S:SASL认证服务器):
(1)C、S之间建立连接。(2)S向C提供认证机制列表。(3)C在认证机制列表中选择一种认证机制。(4)S向C询问授权信息。(5)C向S提交 授权信息。(6)S向C返回认证成功或失败信息。
3.2 回拨认证
在通信过程中,2个XMPP服务器之间经常需要通信,为避免利用服务器欺骗方式进行信息伪造,XMPP 采用了回拨认证机制。回拨认证依靠DNS技术完成,利用回拨认证机制,一个服务器可以确认与自己建立连接的服务器是否经过合法授权,回拨认证过程为: (1)源服务器和接收服务器建立连接,并向接收服务器请求认证。接收服务器回应,并分配认证会话ID。(2)源服务器向接收服务器发送认证密钥。(3)接 收服务器与认证服务器建立连接。认证服务器同时为该认证会话分配一个验证会话ID。(4)接收服务器把源服务器提交来的密钥和验证会话ID 发送给认证服务器,请求验证。(5)认证服务器验证密钥,并给接收服务器返回认证结果。(6)接收服务器给源服务器返回认证结果。
3.3 加  密
虽然SASL提供了先进的认证机制,通信双方必须经过特定的授权认证才能进行正常通信,但是登录信息一般都是密码和用户名等重要 信息,它们大多采用明文方式传送,因此很容易被窃听。为解决该问题,XMPP采用基于传输层安全协议(Transport Layer Security,TLS)的“STARTTLS”扩展来为通信双方提供机密性和数据完整性服务。TLS协议基于对称密钥算法和公钥加密算法,能为各类客 户/服务器产品提供安全传输服务,现已成为保密通信的工业标准。
TLS协议框架主要有2个层次的协议:TLS握手协议和TLS记录协议。TLS握手协议用来让服务器与客户在传输应用层数据之前交换TLS协议版本信 息、协商加密算法、进行(相互)身份认证并交换密钥。TLS记录协议用来将应用层提供的信息进行分组、压缩、数据完整性检查和加密。数据完整性检查通过比 较传输前后使用安全散列函数(如SHA和MD5 等)计算出来的数据的MAC值是否一致来完成。数据加密采用对称密码算法(如R4和DES等)。对数据进行完整性检查和加密的密钥由TLS握手协议来协 商。
XMPP中采用的STARTTLS扩展处理流程如下(C:客户端,S:TLS服务器):
(1)C、S之间建立XML流会话连接。
(2)S 向C 发送STARTTLS扩展服务需求及支持的其他认证机制列表,代码实例如下:
<stream:features>
<starttls xmlns=′urn:ietf:params:xml:ns:xmpp-tls′>
<required/>
</starttls>
<mechanisms xmlns=′urn:ietf:params:xml:ns:xmppsasl′>
<mechanism>DIGEST-MD5</mechanism>
<mechanism>PLAIN</mechanism>
</mechanisms>
</stream:features>
(3)C发送STARTTLS命令给S。
(4)C、S中TLS握手协议开始协商相关加密算法及密钥。
(5)若TLS握手协议协商成功,则关闭当前XML流会话,C发起一个新的XML流会话,所有传送的信息均被TLS记录协议加密。TLS握手协议协商 不成功则发出警告信息。
(6)S向C回复新XML流会话。
4  客户端程序设计中的关键问题
由于网络中已存在大量的XMPP服务器,在一般的应用开发中,只要设计自定功能的客户端程序即可,并可以选用Smack库来加速 开发。
(1)创建一个XMPP连接。因为XMPP使用TCP协议,所以首先必须创建一个网络连接,XMPPConnection就是Smack库用来创建与 XMPP服务器连接的类,创建一个XMPP连接的代码如下:
XMPPConnection connection=new XMPPConnection(″jab-
ber.org″);
如要创建加密连接,可以使用SSLXMPPConnection类:
XMPPConnection connection=new SSLXMPPConnection(″jabber.org″);
(2)登录。TCP连接创建后,需要使用用户名和密码登录到XMPP服务器,登录程序可以使用 XMPPConnection.login(String username,String password)方法。登录后就可以和其他人聊天。
connection.login(″yb″,″password″);//connection为已创建的XMPP连接,下同
connection.createChat(″yb@sdpt.com″).sendMessage
(″Hello!″);
(3)操作名册。每个用户都包括:一个XMPP地址(如“yb@sdpt.com”)、 名称或昵称(如″yb″),及其所属列表(如好友、同事等)。名册能够跟踪好友或某用户组是否在线及其状态信息,登录后,可以使用Roster类来取得好 友或某用户组的状态,代码如下:
Roster roster=con.getRoster( );
for (Iterator i=roster.getEntries( );i.hasNext( ); ) {
System.out.println(i.next( ));}
名册信息通常是随时变化的,可能需要增加或删除。要监听名单及其在线状态的改变,可以使用RosterListener。
(4)发送和接收消息。发送接收消息可以使用Chat和GroupChat类。下面介绍如何使用Chat发送文本消息,GroupChat的使用方法 类似。
Chat newChat=connection.createChat(″yb@sdpt.com″);//创建新Chat
newChat.sendMessage(″Hello!″);//发送消息″Hello!″
利用Chat.sendMessage( )方法可以方便地创建一个消息对象,它的参数就是消息内容,执行后消息会发送出去。Chat对象还能侦听对方的回应,下面的代码会将收到的任何消息返回给 发送端。
Chat newChat=connection.createChat(″yb@sdpt.com″);
newMessage.setBody(″Hi, I′m waiting for you.″);
while (true) {
Message message=newChat.nextMessage( );//等待对方发送消息
newChat.sendMessage(message.getBody());//把对方
}//发送来的消息发回去
(5)修改状态。要修改状态可以用presence.Type.UNAV-ILABLE作为参数创建一个presence,状态将改变为不在线状态。 以下代码将修改为不在线状态,并告知溜冰去了:
Presence presence=new Presence(Presence.Type.UNAVAILABLE);
presence.setStatus(″Gone skating″);
5  结束语
目前,全球有20万个即时通信平台支持XMPP,有1 000万人在使用。简单的接口、开放的协议、互联的架构、权威的标准再加上坚实的用户基础是XMPP的优势。相信XMPP将为即时通信技术的运用提供更为 广阔的空间。
参考文献
1   Peter S A.XMPP Core.RFC 3920,2004
2   Peter S A.XMPP Instant Messaging and Presence.RFC 3921,2004
3   Dierks T,Allen C,Treese W et al.The TLS Protocol Version 1.0.RFC 2246,1999
4   Myers J.Simple Authentication and Security Layer.RFC  2222,1997
5   Kaes C.Definition of Jabber Identifiers (JIDs).JEP 0029,2003
6   Mealling M.The IETF XML Registry.RFC 3688,2004

Popularity: unranked [?]

分类: JAVA 标签:

MySQL配置文件翻译

2010年2月6日 admin 没有评论

#BEGIN CONFIG INFO
#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大
#TYPE: SYSTEM
#END CONFIG INFO
 
#
# 此
mysql配置文件例子针对4G内存
# 主要使用
INNODB
#处理复杂队列并且连接数量较少的
mysql服务器
#
# 将此文件复制到/
etc/my.cnf 作为全局设置,
# mysql-data-dir/my.cnf 作为服务器指定设置
#
(@localstatedir@ for this installation) 或者放入
# ~/.
my.cnf 作为用户设置.
#
# 在此配置文件中, 你可以使用所有程序支持的长选项.
# 如果想获悉程序支持的所有选项
# 请在程序后加上
–help参数运行程序.
#
# 关于独立选项更多的细节信息可以在手册内找到
#
 
#
# 以下选项会被
MySQL客户端应用读取.
# 注意只有
MySQL附带的客户端应用程序保证可以读取这段内容.
# 如果你想你自己的
MySQL应用程序获取这些值
# 需要在
MySQL客户端库初始化的时候指定这些选项
 
#
[client]
#password    = [your_password]
port        = @MYSQL_TCP_PORT@
socket        = @MYSQL_UNIX_ADDR@
 
# *** 应用定制选项 ***
 
#
#  MySQL 服务端
#
[mysqld]
 
# 一般配置选项
port        = @MYSQL_TCP_PORT@
socket        = @MYSQL_UNIX_ADDR@
 
# back_log 是操作系统在监听队列中所能保持的连接数,
# 队列保存了在
MySQL连接管理器线程处理之前的连接.
# 如果你有非常高的连接率并且出现
connection refused 报错,
# 你就应该增加此处的值.
# 检查你的操作系统文档来获取这个变量的最大值.
# 如果将
back_log设定到比你操作系统限制更高的值,将会没有效果
back_log = 50
 
# 不在
TCP/IP端口上进行监听.
# 如果所有的进程都是在同一台服务器连接到本地的
mysqld,
# 这样设置将是增强安全的方法
# 所有
mysqld的连接都是通过Unix sockets 或者命名管道进行的.
# 注意在
windows下如果没有打开命名管道选项而只是用此项
#
(通过 enable-named-pipe 选项) 将会导致mysql服务没有任何作用!
#skip-networking
 
# MySQL 服务所允许的同时会话数的上限
# 其中一个连接将被
SUPER权限保留作为管理员登录.
# 即便已经达到了连接数的上限.
max_connections = 100
 
# 每个客户端连接最大的错误允许数量,如果达到了此限制.
# 这个客户端将会被
MySQL服务阻止直到执行了FLUSH HOSTS 或者服务重启
# 非法的密码以及其他在链接时的错误会增加此值.
# 查看
Aborted_connects 状态来获取全局计数器.
max_connect_errors = 10
 
# 所有线程所打开表的数量.
# 增加此值就增加了
mysqld所需要的文件描述符的数量
# 这样你需要确认在
[mysqld_safe]open-files-limit 变量设置打开文件数量允许至少4096
table_cache = 2048
 
# 允许外部文件级别的锁. 打开文件锁会对性能造成负面影响
# 所以只有在你在同样的文件上运行多个数据库实例时才使用此选项
(注意仍会有其他约束!)
# 或者你在文件层面上使用了其他一些软件依赖来锁定
MyISAM
#external-locking
 
# 服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小
(当与大的BLOB字段一起工作时相当必要)
# 每个连接独立的大小.大小动态增加
max_allowed_packet = 16M
 
# 在一个事务中
binlog为了记录SQL状态所持有的cache大小
# 如果你经常使用大的,多声明的事务,你可以增加此值来获取更大的性能.
# 所有从事务来的状态都将被缓冲在
binlog缓冲中然后在提交后一次性写入到binlog
# 如果事务比此值大, 会使用磁盘上的临时文件来替代.
# 此缓冲在每个连接的事务第一次更新状态时被创建
binlog_cache_size = 1M
 
# 独立的内存表所允许的最大容量.
# 此选项为了防止意外创建一个超大的内存表导致永尽所有的内存资源.
max_heap_table_size = 64M
 
# 排序缓冲被用来处理类似
ORDER BY以及GROUP BY队列所引起的排序
# 如果排序后的数据无法放入排序缓冲,
# 一个用来替代的基于磁盘的合并分类会被使用
# 查看
Sort_merge_passes 状态变量.
# 在排序发生时由每个线程分配
sort_buffer_size = 8M
 
# 此缓冲被使用来优化全联合
(full JOINs 不带索引的联合).
# 类似的联合在极大多数情况下有非常糟糕的性能表现,
# 但是将此值设大能够减轻性能影响.
# 通过
Select_full_join 状态变量查看全联合的数量
# 当全联合发生时,在每个线程中分配
join_buffer_size = 8M
 
# 我们在
cache中保留多少线程用于重用
# 当一个客户端断开连接后,如果
cache中的线程还少于thread_cache_size,
# 则客户端线程被放入
cache中.
# 这可以在你需要大量新连接的时候极大的减少线程创建的开销
#
(一般来说如果你有好的线程模型的话,这不会有明显的性能提升.)
thread_cache_size = 8
 
# 此允许应用程序给予线程系统一个提示在同一时间给予渴望被运行的线程的数量.
# 此值只对于支持
thread_concurrency() 函数的系统有意义( 例如Sun Solaris).
# 你可可以尝试使用
[CPU数量]*(2..4) 来作为thread_concurrency的值
thread_concurrency = 8
 
# 查询缓冲常被用来缓冲
SELECT 的结果并且在下一次同样查询的时候不再执行直接返回结果.
# 打开查询缓冲可以极大的提高服务器速度, 如果你有大量的相同的查询并且很少修改表.
# 查看
Qcache_lowmem_prunes 状态变量来检查是否当前值对于你的负载来说是否足够高.
# 注意: 在你表经常变化的情况下或者如果你的查询原文每次都不同,
# 查询缓冲也许引起性能下降而不是性能提升.
query_cache_size = 64M
 
# 只有小于此设定值的结果才会被缓冲
# 此设置用来保护查询缓冲,防止一个极大的结果集将其他所有的查询结果都覆盖.
query_cache_limit = 2M
 
# 被全文检索索引的最小的字长.
# 你也许希望减少它,如果你需要搜索更短字的时候.
# 注意在你修改此值之后,
# 你需要重建你的
FULLTEXT 索引
ft_min_word_len = 4
 
# 如果你的系统支持
memlock() 函数,你也许希望打开此选项用以让运行中的mysql在在内存高度紧张的时候,数据在内存中保持锁定并且防止可能被swapping out
# 此选项对于性能有益
#memlock
 
# 当创建新表时作为默认使用的表类型,
# 如果在创建表示没有特别执行表类型,将会使用此值
default_table_type = MYISAM
 
# 线程使用的堆大小. 此容量的内存在每次连接时被预留.
# MySQL 本身常不会需要超过64K的内存
# 如果你使用你自己的需要大量堆的
UDF函数
# 或者你的操作系统对于某些操作需要更多的堆,
# 你也许需要将其设置的更高一点.
thread_stack = 192K
 
# 设定默认的事务隔离级别.可用的级别如下:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE
transaction_isolation = REPEATABLE-READ
 
# 内部
(内存中)临时表的最大大小
# 如果一个表增长到比此值更大,将会自动转换为基于磁盘的表.
# 此限制是针对单个表的,而不是总和.
tmp_table_size = 64M
 
# 打开二进制日志功能.
# 在复制
(replication)配置中,作为MASTER主服务器必须打开此项
# 如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志.
log-bin=mysql-bin
 
# 如果你在使用链式从服务器结构的复制模式
(A->B->C),
# 你需要在服务器
B上打开此项.
# 此选项打开在从线程上重做过的更新的日志,
# 并将其写入从服务器的二进制日志.
#log_slave_updates
 
# 打开全查询日志. 所有的由服务器接收到的查询
(甚至对于一个错误语法的查询)
# 都会被记录下来. 这对于调试非常有用, 在生产环境中常常关闭此项.
#log
 
# 将警告打印输出到错误
log文件.  如果你对于MySQL有任何问题
# 你应该打开警告
log并且仔细审查错误日志,查出可能的原因.
#log_warnings
 
# 记录慢速查询. 慢速查询是指消耗了比
long_query_time 定义的更多时间的查询.
# 如果
log_long_format 被打开,那些没有使用索引的查询也会被记录.
# 如果你经常增加新查询到已有的系统内的话. 一般来说这是一个好主意,
log_slow_queries
 
# 所有的使用了比这个时间
(以秒为单位)更多的查询会被认为是慢速查询.
# 不要在这里使用
1, 否则会导致所有的查询,甚至非常快的查询页被记录下来(由于MySQL 目前时间的精确度只能达到秒的级别).
long_query_time = 2
 
# 在慢速日志中记录更多的信息.
# 一般此项最好打开.
# 打开此项会记录使得那些没有使用索引的查询也被作为到慢速查询附加到慢速日志里
log_long_format
 
# 此目录被
MySQL用来保存临时文件.例如,
# 它被用来处理基于磁盘的大型排序,和内部排序一样.
# 以及简单的临时表.
# 如果你不创建非常大的临时文件,将其放置到
swapfs/tmpfs 文件系统上也许比较好
# 另一种选择是你也可以将其放置在独立的磁盘上.
# 你可以使用
;来放置多个路径
# 他们会按照
roud-robin方法被轮询使用.
#tmpdir = /tmp
 
 
# ***  复制有关的设置
 
 
# 唯一的服务辨识号,数值位于
12^32-1之间.
# 此值在
masterslave上都需要设置.
# 如果
master-host 没有被设置,则默认为1, 但是如果忽略此选项,MySQL不会作为master生效.
server-id = 1
 
# 复制的
Slave (去掉master段的注释来使其生效)
#
# 为了配置此主机作为复制的
slave服务器,你可以选择两种方法:
#
#
1) 使用 CHANGE MASTER TO 命令 (在我们的手册中有完整描述) -
#    语法如下:
#
#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=<port>,
#    MASTER_USER=<user>, MASTER_PASSWORD=<password> ;
#
#    你需要替换掉 <
host>, <user>, <password> 等被尖括号包围的字段以及使用master的端口号替换<port> (默认3306).
#
#    例子:
#
#    CHANGE MASTER TO MASTER_HOST=’125.564.12.1‘, MASTER_PORT=3306,
#    MASTER_USER=’joe‘, MASTER_PASSWORD=’secret‘;
#
# 或者
#
#
2) 设置以下的变量. 不论如何, 在你选择这种方法的情况下, 然后第一次启动复制(甚至不成功的情况下,
#     例如如果你输入错密码在
master-password字段并且slave无法连接),
#    slave会创建一个 master.info 文件,并且之后任何对于包含在此文件内的参数的变化都会被忽略
#    并且由
master.info 文件内的内容覆盖, 除非你关闭slave服务, 删除 master.info 并且重启slave 服务.
#    由于这个原因,你也许不想碰一下的配置
(注释掉的) 并且使用 CHANGE MASTER TO (查看上面) 来代替
#
# 所需要的唯一
id号位于 22^321之间
#
(并且和master不同)
# 如果
master-host被设置了.则默认值是2
# 但是如果省略,则不会生效
#server-id = 2
#
# 复制结构中的
master – 必须
#master-host = <hostname>
#
# 当连接到
master上时slave所用来认证的用户名 – 必须
#master-user = <username>
#
# 当连接到
master上时slave所用来认证的密码 – 必须
#master-password = <password>
#
# master监听的端口.
# 可选 – 默认是
3306
#master-port = <port>
 
# 使得
slave只读.只有用户拥有SUPER权限和在上面的slave线程能够修改数据.
# 你可以使用此项去保证没有应用程序会意外的修改
slave而不是master上的数据
#read_only
 
 
#***
MyISAM 相关选项
 
 
# 关键词缓冲的大小, 一般用来缓冲
MyISAM表的索引块.
# 不要将其设置大于你可用内存的
30%,
# 因为一部分内存同样被
OS用来缓冲行数据
# 甚至在你并不使用
MyISAM 表的情况下, 你也需要仍旧设置起 8-64M 内存由于它同样会被内部临时磁盘表使用.
key_buffer_size = 32M
 
# 用来做
MyISAM表全表扫描的缓冲大小.
# 当全表扫描需要时,在对应线程中分配.
read_buffer_size = 2M
 
# 当在排序之后,从一个已经排序好的序列中读取行时,行数据将从这个缓冲中读取来防止磁盘寻道.
# 如果你增高此值,可以提高很多
ORDER BY的性能.
# 当需要时由每个线程分配
read_rnd_buffer_size = 16M
 
# MyISAM 使用特殊的类似树的cache来使得突发插入
#
(这些插入是,INSERTSELECT, INSERTVALUES (), (), …, 以及 LOAD DATA
# INFILE) 更快. 此变量限制每个进程中缓冲树的字节数.
# 设置为
0 会关闭此优化.
# 为了最优化不要将此值设置大于
key_buffer_size.
# 当突发插入被检测到时此缓冲将被分配.
bulk_insert_buffer_size = 64M
 
# 此缓冲当
MySQL需要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一个空表中引起重建索引时被分配.
# 这在每个线程中被分配.所以在设置大值时需要小心.
myisam_sort_buffer_size = 128M
 
# MySQL重建索引时所允许的最大临时文件的大小 (REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).
# 如果文件大小比此值更大,索引会通过键值缓冲创建
(更慢)
myisam_max_sort_file_size = 10G
 
# 如果被用来更快的索引创建索引所使用临时文件大于制定的值,那就使用键值缓冲方法.
# 这主要用来强制在大表中长字串键去使用慢速的键值缓冲方法来创建索引.
myisam_max_extra_sort_file_size = 10G
 
# 如果一个表拥有超过一个索引,
MyISAM 可以通过并行排序使用超过一个线程去修复他们.
# 这对于拥有多个
CPU以及大量内存情况的用户,是一个很好的选择.
myisam_repair_threads = 1
 
# 自动检查和修复没有适当关闭的
MyISAM 表.
myisam_recover
 
 
# 默认关闭
Federated
skip-federated
 
# ***
BDB 相关选项 ***
 
# 如果你运行的
MySQL服务有BDB支持但是你不准备使用的时候使用此选项. 这会节省内存并且可能加速一些事.
skip-bdb
 
 
# ***
INNODB 相关选项 ***
 
# 如果你的
MySQL服务包含InnoDB支持但是并不打算使用的话,
# 使用此选项会节省内存以及磁盘空间,并且加速某些部分
#skip-innodb
 
# 附加的内存池被
InnoDB用来保存 metadata 信息
# 如果
InnoDB为此目的需要更多的内存,它会开始从OS这里申请内存.
# 由于这个操作在大多数现代操作系统上已经足够快, 你一般不需要修改此值.
# SHOW INNODB STATUS 命令会显示当先使用的数量.
innodb_additional_mem_pool_size = 16M
 
# InnoDB使用一个缓冲池来保存索引和原始数据, 不像 MyISAM.
# 这里你设置越大,你在存取表里面数据时所需要的磁盘
I/O越少.
# 在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的
80%
# 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸.
# 注意在
32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制,
# 所以不要设置的太高.
innodb_buffer_pool_size = 2G
 
# InnoDB 将数据保存在一个或者多个数据文件中成为表空间.
# 如果你只有单个逻辑驱动保存你的数据,一个单个的自增文件就足够好了.
# 其他情况下.每个设备一个文件一般都是个好的选择.
# 你也可以配置
InnoDB来使用裸盘分区 – 请参考手册来获取更多相关内容
innodb_data_file_path = ibdata1:10M:autoextend
 
# 设置此选项如果你希望
InnoDB表空间文件被保存在其他分区.
# 默认保存在
MySQLdatadir中.
#innodb_data_home_dir = <directory>
 
# 用来同步
IO操作的IO线程的数量. This value is
# 此值在
Unix下被硬编码为4,但是在Windows磁盘I/O可能在一个大数值下表现的更好.
innodb_file_io_threads = 4
 
# 如果你发现
InnoDB表空间损坏, 设置此值为一个非零值可能帮助你导出你的表.
# 从
1开始并且增加此值知道你能够成功的导出表.
#innodb_force_recovery=1
 
# 在
InnoDb核心内的允许线程数量.
# 最优值依赖于应用程序,硬件以及操作系统的调度方式.
# 过高的值可能导致线程的互斥颠簸.
innodb_thread_concurrency = 16
 
# 如果设置为
1 ,InnoDB会在每次提交后刷新(fsync)事务日志到磁盘上,
# 这提供了完整的
ACID行为.
# 如果你愿意对事务安全折衷, 并且你正在运行一个小的食物, 你可以设置此值到
0或者2来减少由事务日志引起的磁盘I/O
#
0代表日志只大约每秒写入日志文件并且日志文件刷新到磁盘.
#
2代表日志写入日志文件在每次提交后,但是日志文件只有大约每秒才会刷新到磁盘上.
innodb_flush_log_at_trx_commit = 1
 
# 加速
InnoDB的关闭. 这会阻止InnoDB在关闭时做全清除以及插入缓冲合并.
# 这可能极大增加关机时间, 但是取而代之的是
InnoDB可能在下次启动时做这些操作.
#innodb_fast_shutdown
 
# 用来缓冲日志数据的缓冲区的大小.
# 当此值快满时,
InnoDB将必须刷新数据到磁盘上.
# 由于基本上每秒都会刷新一次,所以没有必要将此值设置的太大
(甚至对于长事务而言)
 
innodb_log_buffer_size = 8M
 
# 在日志组中每个日志文件的大小.
# 你应该设置日志文件总合大小到你缓冲池大小的
25%~100%
# 来避免在日志文件覆写上不必要的缓冲池刷新行为.
# 不论如何, 请注意一个大的日志文件大小会增加恢复进程所需要的时间.
innodb_log_file_size = 256M
 
# 在日志组中的文件总数.
# 通常来说
2~3是比较好的.
innodb_log_files_in_group = 3
 
# InnoDB的日志文件所在位置. 默认是MySQLdatadir.
# 你可以将其指定到一个独立的硬盘上或者一个
RAID1卷上来提高其性能
#innodb_log_group_home_dir
 
# 在
InnoDB缓冲池中最大允许的脏页面的比例.
# 如果达到限额,
InnoDB会开始刷新他们防止他们妨碍到干净数据页面.
# 这是一个软限制,不被保证绝对执行.
innodb_max_dirty_pages_pct = 90
 
# InnoDB用来刷新日志的方法.
# 表空间总是使用双重写入刷新方法
# 默认值是
fdatasync, 另一个是 O_DSYNC.
#innodb_flush_method=O_DSYNC
 
# 在被回滚前,一个
InnoDB的事务应该等待一个锁被批准多久.
# InnoDB在其拥有的锁表中自动检测事务死锁并且回滚事务.
# 如果你使用
LOCK TABLES 指令, 或者在同样事务中使用除了InnoDB以外的其他事务安全的存储引擎
# 那么一个死锁可能发生而
InnoDB无法注意到.
# 这种情况下这个
timeout值对于解决这种问题就非常有帮助.
innodb_lock_wait_timeout = 120
 
 
[mysqldump]
# 不要在将内存中的整个结果写入磁盘之前缓存. 在导出非常巨大的表时需要此项
quick
 
max_allowed_packet = 16M
 
[mysql]
no-auto-rehash
 
# 仅仅允许使用键值的
UPDATEsDELETEs .
#safe-updates
 
[isamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
 
[myisamchk]
key_buffer = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
 
[mysqlhotcopy]
interactive-timeout
 
[mysqld_safe]
# 增加每个进程的可打开文件数量.
# 警告: 确认你已经将全系统限制设定的足够高!
# 打开大量表需要将此值设高
open-files-limit = 8192

Popularity: unranked [?]

Openfire修改服务器名

2010年2月6日 admin 没有评论

OpenFire在安装第一次设置了服务器名后
虽然可以通过管理界面修改
但是修改后的Openfire却无法正常工作
而服务器名前也会有个惊叹号
其实查看openfire的警告记录我们可以发现
在修改了服务器名后重启
会有两条关于证书的警告消息
由于openfire在设置好之后
会用服务器名来作为证书的一部分
所以只是单纯的修改服务器名
会导致证书和服务器不一致
导致无法正常使用

解决方法:
服务器设置 -> 服务器证书
将原来的两个密钥删除
然后会提示重启http服务
点击重启并重新登陆管理界面
回到删除密钥的地方
会提示现在没有密钥,需要添加密钥
点添加.OK了.按照新的服务器名的密钥已经生成并且添加了
这时候再回去看服务器状态,服务器名前面的惊叹号已经没有了
我们也可以正常使用jabber服务了

Popularity: unranked [?]

OpenFire使用内存

2010年2月6日 admin 没有评论

OpenFire的JVM默认情况下使用64M内存
这在将OpenFire作为服务运行的情况下肯定不够用
我们需要修改参数.使其能够占用服务器的更多内存资源

Windows:
在openfire的bin目录下建立openfired.vmoptions(作为应用程序运行)或者openfire-service.vmoptions(作为服务运行)
内容添加
-Xms512m
-Xmx512m

Linux:
修改/etc/sysconfig/opfire文件
去掉注释
OPENFIRE_OPTS=”-Xmx512m”

Popularity: unranked [?]

分类: JAVA 标签:

Openfire im gateway plugins install

2010年2月3日 admin 没有评论

If you install im gateway plugin firstly, perhaps you did not encounter this problem.
If you upgrade your im gateway plugin, perhaps you have been in trouble.
Unfortunately,I encountered this problem some days ago.
I used the openfire 3.4.5, and it contains the gateway plugins;
now,I want to upgrade to openfire3.5.2, of course the gateway plugin should be upgraded correspondingly.
so I do the following: removed gateway.jar (old) and added gateway.jar(version 1.2.3a).
I restarted the openfire,the gateway page existsed in the Admin Console, but the Setting is not available.
I suspected that there is the issue about DWR compitibility in openfire plugins, but I can not find the solution.
More strangely, log error:java.lang.ClassNotFoundException: org.jivesoftware.openfire.gateway.util.Log4JToOpenfireAppender
I have no idea,so google, baidu and www.igniterealtime.org
some one say it need delete the old gateway plugin completely; so I remembered the database.
I removed all table about gateway in database, and all properties about gateway in the table named jiveproperties.
restart,
great.
So far so good ,I have solved the problem.

Popularity: unranked [?]

分类: Flash, JAVA 标签: