如何配置spark web ui 端口

spark1.0配置(转载) -
- ITeye技术网站
博客分类:
1:Spark1.0.0属性配置方式
Spark属性提供了大部分应用程序的控制项,并且可以单独为每个应用程序进行配置。
在Spark1.0.0提供了3种方式的属性配置:
SparkConf方式
SparkConf方式可以直接将属性值传递到SparkContext;
SparkConf可以对某些通用属性直接配置,如master使用setMaster,appname使用setAppName;
也可以使用set()方法对属性进行键-值对配置,如set("spark.executor.memory", "1g") 。
命令行参数方式
这种方式是在使用spark-submit或spark-shell提交应用程序的时候,用命令行参数提交;
这种方式可以比较灵活的配置各个应用程序的运行环境;
可以通过spark-submit --help 或 spark-shell –help显示出属性的完整列表。
文件配置方式
该方式是将属性配置项以键值对方式写入文本文件中,一个配置项占一行;
该文件默认为conf/spark-defaults.conf,spark-submit在提交应用程序的时候会检查是否存在该文件,有的话就将相关的属性配置载入;
该文件可以在 spark-submit的命令参数--properties-file定义不同的位置。
SparkConf方式 & 命令行参数方式 &文件配置方式
查看Spark属性配置
通过应用程序的webUI(地址http://&driver&:4040)可以查看Spark属性配置,从而检查属性配置是否正确;
只是显示通过上面三种方式显式指定的属性配置,对于其他属性可以假定使用默认配置;
对于大多数内部控制属性,系统已经提供了合理的默认配置。
2:Spark1.0.0中通用属性
A:应用程序属性
spark.app.name
应用程序名称
spark.master
要连接的群集管理器
spark.executor.memory
每个executor使用的内存总量
spark.serializer
org.apache.spark.serializer.JavaSerializer
在网络数据传送或缓存时使用的序化 器 ,默认的序 化 器 是Java序化 器 ,虽然这种序 化 器 对任何Java对象可以使用,兼容性好,但是处理速度相当的慢;如果要追求处理速度的话,建议使用org.apache.spark.serializer.KryoSerializer序化 器 。当然也可以任意是定义为org.apache.spark.Serializer 子类的 序化器 。
spark.kryo.registrator
如果要使用 Kryo 序化 器 ,需要创建一个继承 KryoRegistrator的类并设置系统属性spark.kryo.registrator指向该类。
spark.local.dir
用于暂存 空间的目录,该目录用于保存map输出文件或者 转储 RDD。该目录位于高速的本地磁盘上,或者位于使用逗号分隔的多个不同磁盘上的目录。注意: 在Spark 1.0 及更高版本这属性将被 群集管理器配置的环境变量 SPARK_LOCAL_DIRS (Standalone、Mesos) 或 LOCAL_DIRS (YARN) 代替。
spark.logConf
SparkContext 启动时记录有效 SparkConf信息。
B:运行时环境
spark.executor.memory
分配给每个executor进程总内存(使用类似512m、2g格式)
spark.executor.extraJavaOptions
要传递给executor的额外 JVM 选项,注意不能使用它来设置Spark属性或堆大小设置。
spark.executor.extraClassPath
追加到executor类路径中的附加类路径,主要为了兼容旧版本的Spark,通常不需要用户设置。
spark.executor.extraLibraryPath
启动executor JVM 时要用到的特殊库路径。
spark.files.userClassPathFirst
executor在加载类的时候是否优先使用用户自定义的JAR包,而不是Spark带有的JAR包。此功能可以用于解决Spark依赖包和用户依赖包之间的冲突。目前,该属性只是一项试验功能。
C:Shuffle 操作
spark.shuff le.consolidateFiles
如果设置为true,在shuffle时就合并中间文件,对于有大量Reduce任务的shuffle来说,合并文件可以提高文件系统性能。如果使用的是 ext4 或 xfs 文件系统, 建议设置为true;对于ext3, 由于文件系统的限制,设置为true 反而 会使内核&8的机器 降低性能。
spark.shuffle.spill
如果设置为true,在 shuffle 期间 通过溢出数据到磁盘来降低 了 内存 使用总 量,溢出阈值是由spark.shuffle.memoryFraction指定的。
spark.press
是否压缩在 shuffle 期间溢出的数据,如果压缩将使用pression.codec。
是否压缩map输出文件,压缩将使用pression.codec。
spark.shuffle.file.buffer.kb
每个shuffle的文件输出流 内存缓冲区 的 大小 ,以KB为单位。这些缓冲区可以减少磁盘寻道的次数,也减少创建shuffle中间文件时的系统调用。
spark.reducer.maxMbInFlight
每个reduce任务同时获取map输出的最大大小 (以兆字节为单位)。由于每个map输出都需要一个缓冲区来接收它,这代表着 每个 reduce 任务有 固定的内存开销,所以要设置小点,除非有很大内存。
D:Spark UI
spark.ui.port
应用程序webUI的端口
spark.ui.retainedStages
在GC之前webUI保留的stage数量
spark.ui.killEnabled
允许在 webUI将stage和相应的job杀死
spark.eventLog.enabled
是否记录 Spark事件,用于 应用程序在完成后 重构 webUI。
是否压缩记录Spark事件,前提spark.eventLog.enabled为true。
spark.eventLog.dir
file:///tmp/spark-events
如果spark.eventLog.enabled为 true,该属性为记录spark 事件的根目录。在此根目录中,Spark为 每个应用程序 创建分目录,并将 应用程序的 事件记录到在此目录中。用户可以将此属性设置为HDFS目录,以便history server读取历史记录文件。
E:压缩和序化
是否在发送之前压缩广播变量。
是否压缩序化的RDD分区 ,可以节省大量空间,但会消耗一些额外的CPU时间。
pression.codec
org.apache.spark.io. LZFCompressionCodec
用于压缩内部数据如 RDD 分区和shuffle输出的 编码 解码器 。 Spark提供两个编解码器: org.apache.spark.io.LZFCompressionCodec和org.apache.spark.io.SnappyCompressionCodec。其中,Snappy提供更快速的压缩和解压缩,而LZF提供了更好的压缩比。
pression.snappy.block.size
使用 Snappy 编 码 解码器时, 编 码 解码器使用的 块大小 (以字节为单位)
spark. closure .serializer
org.apache.spark.serializer.JavaSerializer
用于闭包 的序化器,目前只有支持Java序化器。
spark.serializer. objectStreamReset
使用 org.apache.spark.serializer.JavaSerializer序化时,序化器缓存对象以防止写入冗余数据,这时停止这些对象的垃圾收集。通过调用重置序化器,刷新该信息就可以收集旧对象。若要关闭这重定期重置功能将其设置为 & = 0
。默认情况下 每10000个对象将 重置序化器。
spark.kryo.referenceTracking
当使用 Kryo 序化数据时, 是否跟踪对同一对象的引用。如果你的对象图有回路或者同一对象有多个副本,有必要设置为true;其他情况下 可以禁用以提高性能。
spark.kryoserializer.buffer.mb
在Kryo 里 允许的最大对象大小 ( Kryo 会创建一个缓冲区,至少和序化的最大单个对象一样大) 。如果Kryo 出现缓冲区限制超出异常报错,增加这个值。注意,每个worker的每个core只有一个缓冲区。
F:执行操作
spark.default.parallelism
本地模式: 本地机器内核数
Mesos精细模式: 8
其他: 所有executor的core总数
或者2,以较大者为准
如果用户没设置,系统使用集群中运行shuffle操作的默认任务数(groupByKey、 reduceByKey等)。
spark.broadcast.factory
org.apache.spark.broadcast. HttpBroadcastFactory
广播的实现类
spark.broadcast.blockSize
TorrentBroadcastFactory块 大小(以kb为单位)。太大值在广播时降低并行性 (使速度变慢);太小值, BlockManager性能 可能会受到冲击。
spark.files.overwrite
通过 SparkContext.addFile() 添加的文件在目标中已经存在并且内容不匹配时,是否覆盖目标文件。
spark.files.fetchTimeout
在 获取由driver 通过SparkContext.addFile() 添加的文件时, 是否使用 通信时间 超时。
spark.storage.memoryFraction
Java堆用于cache的比例
spark.tachyonStore.baseDir
System.getProperty("java.io.tmpdir")
用于存储RDD的techyon目录,tachyon文件系统的URL由spark.tachyonStore.url设置。也可以是逗号分隔的多个techyon目录。
spark.storage. memoryMapThreshold
以字节为单位的块大小,用于磁盘读取一个块大小进行内存映射。这可以防止Spark在内存映射时使用很小块,一般情况下,对块进行内存映射的开销接近或低于操作系统的页大小。
spark.tachyonStore.url
tachyon://localhost:19998
基于techyon文件的URL。
spark.cleaner.ttl
spark记录任何元数据(stages生成、task生成等)的持续时间。定期清理可以确保将超期的元数据遗忘,这在运行长时间任务是很有用的,如运行24/7的sparkstreaming任务。注意RDD持久化在内存中的超期数据也会被清理。
G:网络通信
spark.driver.host
本地主机名
运行driver的主机名或 IP 地址。
spark.driver.port
driver侦听的端口。
spark.akka.frameSize
以MB为单位的driver和executor之间通信信息的大小,设置值越大,driver可以接受更大的计算结果。
spark.akka.threads
用于通信的actor线程数,在大型集群中拥有更多CPU内核的driver可以增加actor线程数。
spark.akka.timeout
以秒为单位的 Spark节点 之间通信超时时间。
spark.akka.heartbeat.pauses
下面3个参数是用于设置akka自带的故障探测器,设置很大值的话,可以停用故障探测器。如果想启用故障探测器,以秒为单位设置这3个参数。通常是在特殊需要的情况下开启故障探测器,一个敏感的故障探测器有助于恶意的executor的定位,而对于由于GC暂停或网络滞后引起的情况下,不需要开启故障探测器;另外故障探测器的开启会导致由于心跳信息的频繁交换而引起的网络泛滥。 本参数是设置可接受的心跳停顿时间。
spark.akka.failure-detector.threshold
对应AKKA的akka.remote.transport-failure-detector.threshold
spark.akka.heartbeat.interval
心跳间隔时间
spark.task.cpus
为每个任务分配的 内核 数。
spark.task.maxFailures
job放弃task前该task的失败次数,该值&=1
spark.scheduler.mode
SparkContext对job进行调度所采用的模式。 对于多用户可采用FAIR模式。
spark.cores.max
当应用程序运行在Standalone集群或者粗粒度共享模式Mesos集群时,应用程序向集群请求的最大CPU内核总数(不是指每台机器,而是整个集群)。如果不设置,对于Standalone集群将使用spark.deploy.defaultCores中数值,而Mesos将使用集群中可用的内核。
spark.mesos.coarse
如果设置为true,在Mesos集群中运行时使用粗粒度共享模式。
spark.speculation
以下几个参数是关于Spark推测执行机制的相关参数 。此参数设定是否使用推测执行 机制,如果设置为true则spark使用推测 执行 机制,对于Stage中拖后腿的Task在其他节点中重新启动,并将最先完成的Task的计算结果最为最终结果。
spark.speculation.interval
Spark多长时间进行检查task运行状态用以推测,以毫秒为单位。
spark.speculation.quantile
推测启动前,Stage必须要完成总Task的百分比。
spark.speculation.multiplier
比已完成Task的运行速度中位数慢多少倍才启用推测
spark.locality.wait
以下几个参数是关于Spark数据本地性的相关参数。 本参数是以毫秒为单位启动本地数据task的等待时间,如果超出就启动下一本地优先级别的task。该设置同样可以应用到各优先级别的本地性之间(本地进程 -& 本地节点 -& 本地机架 -& 任意节点 ),当然,也可以通过spark.locality.wait.node等参数设置不同优先级别的本地性。
spark.locality.wait.process
spark.locality.wait
本地进程级别的本地等待时间
spark.locality.wait.node
spark.locality.wait
本地节点级别的本地等待时间
spark.locality.wait.rack
spark.locality.wait
本地机架级别的本地等待时间
spark.scheduler.revive.interval
复活重新获取资源的Task的最长时间间隔(毫秒),发生在Task因为本地资源不足而将资源分配给其他Task运行后进入等待时间,如果这个等待时间内重新获取足够的资源就继续计算。
spark.authenticate
Spark是否启用内部身份验证。
spark.authenticate.secret
设置Spark用于组件之间进行身份验证的密钥。如果不是YARN上运行并且spark.authenticate为true时,需要设置密钥。
spark.core.connection. auth.wait.timeout
Spark用于组件时间进行身份认证的超时时间。
spark.ui.filters
Spark web UI 要使用的 以逗号分隔的筛选器名称列表。 筛选器要符合javax servlet Filter标准, 每个筛选器的参数可以通过设置java系统属性来指定: spark.&class name of filter&.params='param1=value1,param2=value2' 例如: -Dspark.ui.filters=com.test.filter1 -.test.filter1.params='param1=foo,param2=testing'
spark.ui.acls.enable
Spark webUI存取权限是否启用。如果启用,在用户浏览web界面的时候会检查用户是否有访问权限。
spark.ui.view.acls
以逗号分隔Spark webUI访问用户的列表。默认情况下只有启动Spark job的用户才有访问权限。
J:Spark Streaming
spark.streaming.blockInterval
在时间间隔内 (毫秒)Spark Streaming接收器将接收数据合并成数据块并存储在Spark。
spark.streaming.unpersist
如果设置为true,强迫将SparkStreaming持久化的RDD数据从Spark内存中清理,同样的,SparkStreaming接收的原始输入数据也会自动被清理;如果设置为false,则允许原始输入数据和持久化的RDD数据可被外部的Streaming应用程序访问,因为这些数据不会自动清理。
3:集群特有的属性
A:Standalone特有属性
Standalone还可以通过环境变量文件conf/spark-env.sh来设置属性,相关的配置项是:
SPARK_MASTER_OPTS
配置master使用的属性
SPARK_WORKER_OPTS
配置worker使用的属性
SPARK_DAEMON_JAVA_OPTS
配置master和work都使用的属性
配置的时候,使用类似的语句:
export SPARK_MASTER_OPTS="-Dx1=y1 -Dx2=y2"
# - 其中x代表属性,y代表属性值
其中SPARK_MASTER_OPTS所支持的属性有:
spark.deploy.spreadOut
Standalone集群管理器是否自由选择节点还是固定到尽可能少的节点,前者会有更好的数据本地性,后者对于计算密集型工作负载更有效
spark.deploy.defaultCores
如果没有设置spark.cores.max,该参数设置Standalone集群分配给应用程序的最大内核数,如果不设置,应用程序获取所有的有效内核。注意在一个共享的集群中,设置一个低值防止攫取了所有的内核,影响他人的使用。
spark.worker.timeout
master因为没有收到心跳信息而认为worker丢失的时间(秒)
其中SPARK_WORKER_OPTS所支持的属性有:
spark.worker.cleanup.enabled
是否定期清理worker的应用程序工作目录,只适用于Standalone模式,不适用于YARN模式。清理的时候将无视应用程序是否在运行。
spark.worker.cleanup.interval
清理worker本地过期的应用程序工作目录的时间间隔(秒)
spark.worker.cleanup.appDataTtl
worker保留应用程序工作目录的有效时间。该时间由磁盘空间、应用程序日志、应用程序的jar包以及应用程序的提交频率来设定。
其中SPARK_DAEMON_JAVA_OPTS所支持的属性有:
spark.deploy.recoveryMode
下面3个参数是用于配置zookeeper模式的master HA。 设置为ZOOKEEPER表示启用master备用恢复模式,默认为NONE。
spark.deploy.zookeeper.url
zookeeper集群URL
spark.deploy.zookeeper.dir
zooKeeper保存恢复状态的目录,缺省为/spark
spark.deploy.recoveryMode
设成FILESYSTEM启用master单节点恢复模式,缺省值为NONE
spark.deploy.recoveryDirectory
Spark保存恢复状态的目录
B:YARN特有属性
YARN特有属性的配置,应该是支持SparkConf方式和conf/spark-defaults.conf文件配置方式,
spark.yarn.applicationMaster.waitTries
RM等待Spark AppMaster启动次数,也就是SparkContext初始化次数。超过这个数值,启动失败。
spark.yarn.submit.file.replication
应用程序上载到HDFS的文件的复制因子
spark.yarn.preserve.staging.files
设置为true,在job结束后,将stage相关的文件保留而不是删除。
spark.yarn.scheduler.heartbeat.interval-ms
Spark AppMaster发送心跳信息给YARN RM的时间间隔
spark.yarn.max.executor.failures
2倍于executor数
导致应用程序宣告失败的最大executor失败数
spark.yarn.historyServer.address
Spark history server的地址(要含有http://)。这个地址会在应用程序完成后提交给YARN RM,使得将信息从RM UI连接到history server UI上。
zhangxiong0301
浏览: 59106 次
你好,params.keys,params.values以及# ...
qindongliang1922 写道AM中其它与内存相关的参 ...
AM中其它与内存相关的参数,还有JVM相关的参数,这些参数可以 ...安装配置openfire 3.8 构建spark, web client环境 - hello world - ITeye技术网站
博客分类:
该帖子展示了如何安装openfire 以及做一些配置 例如cross-domain 并且会在本地安装spark客户端以及web客户端, web客户端主要用于打印日志,输出客户端与XMPP服务器之间传输XMPP节。 web客户端主要参照了《Professional XMPP Programming with JavaScript and jQuery》这本书 第4章的例子,该书的PDF下载地址:http://ishare..cn/f/.html
第一步 下载安装openfire和spark的最新版本 到下面的页面下载即可。注意openfire请下载zip版本。 至于spark就看你的电脑有么有安装jre 如果安装了 就下载 spark_online.exe版本如果没有安装请下载spark.exe版本
http://www.igniterealtime.org/downloads/index.jsp
下载完以后解压缩 然后配置http绑定(这一步很关键 如果配置不正确的话 本地Web客户端无法通过bosh连接 至于bosh是啥玩意你自己到网上找)在openfire目录下的conf目录下建立一个XML文件,取名为crossdomain.xml 并且把以下的XML代码粘上去然后保存
&?xml version="1.0"?&
&!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd"&
&cross-domain-policy&
&site-control permitted-cross-domain-policies="all"/&
&allow-access-from domain="*" to-ports="70,7443" secure="true"/&
&/cross-domain-policy&
然后启动,打开cmd进入openfire目录 执行以下命令:
java -Xms512m -Xmx1024m -DopenfireHome=./ -Dopenfire.lib.dir=./lib/
-classpath
./lib/startup.jar -jar ./lib/startup.jar
其中-Xms512m -Xmx1024m这两个参数你自己看着办。
执行完以上命令 openfire就启动了。进入管理页面 首先会让你初始化openfire,例如语言,数据库等 这些初始化设置网上一大片你自己找。
配置完以后通过管理员帐号进入管理页面的服务器设置页面 确保http绑定已经启动了7070端口。OK 完事了。
然后安装spark,这东西没啥可说的 跟安装QQ一样简单 一路下一步即可。安装完以后多建立几个帐号 留给web客户端用。
现在开始搭建web客户端 这东西主要用来输出日志 以及发送xmpp节 让你感受一下以底层的方式通过发送艾克斯艾姆屁屁节与服务器端打交道。至于xmpp节的含义以及使用你到网上找 一大片一大片的。
我用eclipse建立了一个static web程序(下载附件)
以下是web客户端的html文件
&!DOCTYPE html&
&meta charset="UTF-8"&
&title&Peek - Chapter 4&/title&
&link rel="stylesheet" href="/ajax/libs/jqueryui/1.10.3/themes/cupertino/jquery-ui.css"&
&script type="text/javascript" src="/ajax/libs/jquery/1.9.1/jquery.js"&&/script&
&script type="text/javascript" src="/ajax/libs/jqueryui/1.10.3/jquery-ui.js"&&/script&
&!-- strophe是xmpp的客户端 我们是用它来与xmpp通信的 --&
&script type="text/javascript" src="../js/strophe.js"&&/script&
&!-- flXHR用来跨域请求 --&
&script type="text/javascript" src="../js/flensed/flXHR.js"&&/script&
&!-- strophe的flxhr插件 --&
type="text/javascript" src="../js/strophe.flxhr.js"&&/script&
&!-- 该页面的css文件 --&
&link rel='stylesheet' type='text/css' href='peek.css'&
&!-- 针对这个web客户端写的js 里面有很多重要的内容 细看 下面有详细的说明 --&
&script src='peek.js'&&/script&
&h1&Peek&/h1&
&div id='console'&&/div&
&textarea id='input' class='disabled' disabled='disabled'&&/textarea&
&div id='buttonbar'&
&input id='send_button' type='button' value='Send Data'
disabled='disabled' class='button'& &input
id='disconnect_button' type='button' value='Disconnect'
disabled='disabled' class='button'&
&!-- login dialog --&
&div id='login_dialog' class='hidden'&
&label&JID:&/label&&input type='text' id='jid'& &label&Password:&/label&&input type='password' id='password'&
下面是peek.js文件
// 建立Peek对象
var Peek = {
connection: null, // 用来保存Strophe.Connection对象
// show_traffic方法用来打印输出的xmpp节和从xmpp服务器接收到的xmpp节,至于细节可以不看,看了也就那么回事。
// body是输入和输出的xmpp节,type分incoming和outgoing区分输入和输出 以达到以不同的颜色区分输入和输出,黑色背景是我自己发出的输出节 棕色北京是服务器端发来的xmpp节
show_traffic: function (body, type) {
if (body.childNodes.length & 0) {
var console = $('#console').get(0);
var at_bottom = console.scrollTop &= console.scrollHeight - console.clientH;
$.each(body.childNodes, function () {
var str = Strophe.serialize(this);
alert(type + ': ' + str);
$('#console').append("&div class='" + type + "'&" + Peek.pretty_xml(this) + "&/div&");
if (at_bottom) {
console.scrollTop = console.scrollH
// 该方法用于美化xmpp节 你觉得有用你就自己细看
pretty_xml: function (xml, level) {
var result = [];
if (!level) {
level = 0;
result.push("&div class='xml_level" + level + "'&");
result.push("&span class='xml_punc'&&&/span&");
result.push("&span class='xml_tag'&");
result.push(xml.tagName);
result.push("&/span&");
// attributes
var attrs = xml.
var attr_lead = []
for (i = 0; i & xml.tagName.length + 1; i++) {
attr_lead.push("&");
attr_lead = attr_lead.join("");
for (i = 0; i & attrs. i++) {
result.push(" &span class='xml_aname'&");
result.push(attrs[i].nodeName);
result.push("&/span&&span class='xml_punc'&='&/span&");
result.push("&span class='xml_avalue'&");
result.push(attrs[i].nodeValue);
result.push("&/span&&span class='xml_punc'&'&/span&");
if (i !== attrs.length - 1) {
result.push("&/div&&div class='xml_level" + level + "'&");
result.push(attr_lead);
if (xml.childNodes.length === 0) {
result.push("&span class='xml_punc'&/&&/span&&/div&");
result.push("&span class='xml_punc'&&&/span&&/div&");
// children
$.each(xml.childNodes, function () {
if (this.nodeType === 1) {
result.push(Peek.pretty_xml(this, level + 1));
} else if (this.nodeType === 3) {
result.push("&div class='xml_text xml_level" +
(level + 1) + "'&");
result.push(this.nodeValue);
result.push("&/div&");
result.push("&div class='xml xml_level" + level + "'&");
result.push("&span class='xml_punc'&&/&/span&");
result.push("&span class='xml_tag'&");
result.push(xml.tagName);
result.push("&/span&");
result.push("&span class='xml_punc'&&&/span&&/div&");
return result.join("");
// 用来将你输入XMPP节转换成XMP
text_to_xml: function (text) {
if (window['DOMParser']) {
var parser = new DOMParser();
doc = parser.parseFromString(text, 'text/xml');
} else if (window['ActiveXObject']) {
var doc = new ActiveXObject("MSXML2.DOMDocument");
doc.async =
doc.loadXML(text);
type: 'PeekError',
message: 'No DOMParser object found.'
var elem = doc.documentE
if ($(elem).filter('parsererror').length & 0) {
$(document).ready(function () {
// 登录窗口
$('#login_dialog').dialog({
autoOpen: true,
draggable: false,
modal: true,
title: 'Connect to XMPP',
buttons: {
"Connect": function () {
$(document).trigger('connect', {
jid: $('#jid').val(),
password: $('#password').val()
$('#password').val('');
$(this).dialog('close');
// 断开与xmpp服务器之间的连接的按钮
$('#disconnect_button').click(function () {
Peek.connection.disconnect();
// 发送你输入的XMPP节的按钮
$('#send_button').click(function () {
var input = $('#input').val();
var error =
if (input.length & 0) {
if (input[0] === '&') {
var xml = Peek.text_to_xml(input);
if (xml) {
Peek.connection.send(xml);// 发送你输入的XMPP节到XMPP服务器
$('#input').val('');
} else if (input[0] === '$') { // 如果你输入的stophe的代码 那就会实行 但最终还是会生成XML格式的
var builder = eval(input);
Peek.connection.send(builder);
$('#input').val('');
} catch (e) {
console.log(e);
if (error) {
$('#input').animate({backgroundColor: "#faa"});
$('#input').keypress(function () {
$(this).css({backgroundColor: '#fff'});
$(document).bind('connect', function (ev, data) {
// 千万别忘了改成你自己用openfire安装的xmpp服务器的http绑定地址
var conn = new Strophe.Connection("http://anywhere:7070/http-bind/");
// xmlInput方法用来接收服务器发送来的XMPP节
conn.xmlInput = function (body) {
alert('Input: ' + body);
Peek.show_traffic(body, 'incoming');
// xmlOutput是客户端发送的xmpp节
conn.xmlOutput = function (body) {
alert('Output: ' + body);
Peek.show_traffic(body, 'outgoing');
// 连接xmpp服务器 Strophe在连接的过程中有好几个状态 其中包括Strophe.Status.CONNECTED,Strophe.Status.DISCONNECTED等,详细的信息你自己看书查 (第3章 48页)
conn.connect(data.jid, data.password, function (status) {
if (status === Strophe.Status.CONNECTED) {
$(document).trigger('connected');
} else if (status === Strophe.Status.DISCONNECTED) {
$(document).trigger('disconnected');
Peek.connection =
// 绑定已经连接的事件
$(document).bind('connected', function () {
$('.button').removeAttr('disabled');
$('#input').removeClass('disabled').removeAttr('disabled');
// 绑定断开连接的事件
$(document).bind('disconnected', function () {
$('.button').attr('disabled', 'disabled');
$('#input').addClass('disabled').attr('disabled', 'disabled');
使用流程 当你打开这个WEB客户端的时候 页面会提示你登录,你就用通过spark建立的账户登录就行,登录完以后控制台会输出一大堆xmpp节 黑色背景的是你自己发送的 棕色北京是服务器发送过来的。
现在你就可以通过这个web客户端与spark客户端进行好友添加 聊天了 例如你添加好友的话就需要订阅这个好友 并且那个好友也需要订阅你 这样你们俩才能进行聊天 参照下面的xmpp节:
&presence /& &!-- 出席可用,相当于QQ里的上线 --&
&iq from="seong@anywhere" type="get" id="roster1"&
&query xmlns="jabber:iq:roster"/&
&/iq& &!-- 获取自己的花名册 相当于QQ里的获取好友列表 --&
&presence from="aobama@anywhere" to="xijinping@anywhere" type="subscribe"/& &!-- 出席订阅,相当于QQ里的添加好友,在这里是奥巴马添加习大大为好友 --&
&presence from="xijinping@anywhere" to="aobama@anywhere" type="subscribed"/& &!-- 允许订阅,相当于QQ里的接受好友添加,既然奥巴马添加习大大为好友,那习大大不能无视吧 所以他就通过将type属性的值设置为subscribed 来接受奥巴马的好友添加请求 --&
&presence from="xijinping@anywhere" to="aobama@anywhere" type="subscribe"/& &!-- 习大大心里一想 你奥巴马添加我为好友 也不能跟我聊天啊 因为xmpp协议只允许在双向订阅的情况下才能聊天 所以习大大也向奥巴马发送了添加好友请求 --&
&presence from="aobama@anywhere" to="xijinping@anywhere" type="subscribed"/& &!-- 奥巴马一看习大大也请求添加奥巴马为好友 礼尚往来嘛 所以也通过发送type为subscribed的出席节 接受习大大的好友添加请求,现在此时两个人可以聊天 并且对方都在自己的花名册里(好友列表) --&
&message from="xijinping@anywhere" to="aobama@anywhere" type="chat"&
&body&hello 2B&/body&
&/message& &!-- 习大大发送信息给奥巴马 说:hello 2B --&
&message from="aobama@anywhere" to="xijinping@anywhere" type="chat"&
&body&SB,你们国家的人权问题啥时候能解决啊?&/body&
&/message& &!-- 奥巴马一看习大大骂他2B 怒了 就回复:SB,你们国家的人权问题啥时候能解决啊? --&
&presence type="unavailable"/& &!-- 习大大一看奥巴马正好问中GCD的邪恶了 就赶紧离线 --&
&presence from="xijinping@anywhere" to="aobama@anywhere" type="unsubscribe"/& &!-- 然后删除奥巴马 --&
下载次数: 91
浏览: 14127 次
连接不了。。。
看了你的帖子,写的不错,不过没有帮上我,我现在的项目是使用注解 ...}

我要回帖

更多关于 spark web ui 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信