October 3, 2013
ZeroMQ的模式-Publish-Subscribe[转]
"Publish-subscribe Pattern:发布订阅模式。\n现实中,并不是所有请求都期待答复,而不期待答复,自然就没有了状态。所以相对于REQ-REP,PUB-SUB模式容易理解也简单得多。广播听过吧?收音机用过吧?就这个意思。\n相应地,该模式下的socket也就两种:ZMQ_PUB \u0026amp; ZMQ_SUB。 分别对应电台和收音机。\nZMQ_PUB ZMQ_PUB主要用来让消息发布者用来散发消息的。所有连接上的peer都能收到由它散发的消息。 zmq_recv(3) 这个API是不能用在这个socket上的,原因显而易见。而zmq_send作用在该socket上时是永远不会阻塞的,如果订阅者异常,发出的消息则会被丢弃。\nSummary of ZMQ_PUB characteristics\nCompatible peer sockets ZMQ_SUB Direction\nUnidirectional\nSend/receive pattern\nSend only\nIncoming routing strategy\nN/A\nOutgoing routing strategy …"
October 3, 2013
ZeroMQ的模式-综述
"通过对 Guide 的阅读,可以发现ZeroMQ对这个世界中消息传输的模式进行了很好的抽象。为了描述模式,0mq定义了不同的socket。 0mq socket是0mq世界的东西,跟传统世界的socket是不一样的。\n我们知道,传统的socket其实就是访问下面两种(TCP \u0026amp; UDP)对象的同步的接口:\n面向连接的可靠字节流(SOCK_STREAM) 无连接的不可靠的数据报文(SOCK_DGRAM) 所以你可以说传统socket传输的是字节流或者独立的报文。\n而0mq的socket传输的是消息(Message)。它是对异步_消息_队列(MQ)的一种抽象。官方的原话是:\nØMQ sockets present an abstraction of an asynchronous message queue, with the exact queueing semantics depending on the socket type in use.\n异步的意思在这里指的是物理连接的创建、销毁、重连、传输对于用户来说都是透明的,这些东西都由0mq组织好了。它传输的是独立的**消 …"
October 3, 2013
ZeroMQ的模式-Requset-Reply[转]
"我们先来看看第一种模式:Request-Reply Pattern。 请求应答模式。\nRequest-Reply这个名字很直白,口语点说就是一问一答。可以使同步的遵循请求序的一问一答,也可以是异步的不按请求序的一问一答;其中也可以包含各种不同的路由策略——让谁来回答。zeromq定义的为这个模式服务的socket有:ZMQ_REQ, ZMQ_REP, ZMQ_ROUTER以及ZMQ_DEALER. 用他们进行合理的组合,就可以实现现实世界中各种不同的请求应答模式。\n分别来看:\nZMQ_REQ ZMQ_REQ做的事情就是发问,然后收答。发、收必须是严格按序进行。请求时对对端进行Round Robin,遇到异常则阻塞。官方对这个socket的总结如下:\nSummary of ZMQ_REQ characteristics\nCompatible peer sockets ZMQ_REP Direction\nBidirectional\nSend/receive pattern\nSend, Receive, Send, Receive, …\nOutgoing routing strategy …"
October 3, 2013
ZeroMQ的模式-Pipeline[转]
"Pipeline pattern 管道模式。\n这种模式描述的场景是数据被散布到以管道方式组织的各个节点上。管道的每一步都连接一个或多个节点,连接多个节点时数据以RR方式往下流。\n注意是流,意味着数据跟发布模式一样是单向的。这个模式对应的socket是ZMQ_PUSH和ZMQ_PULL.\nZMQ_PUSH 用来向下游节点发消息。下游多个节点时采取RoundRobin分发,_zmq_recv()_对于这个socket也是无效的。\n与Pub不同的是,当下游节点达到高水位(HWM)或者根本没有下游节点时,_zmq_send()_就阻塞了,消息并不丢失。\nSummary of ZMQ_PUSH characteristics\nCompatible peer sockets ZMQ_PULL Direction\nUnidirectional\nSend/receive pattern\nSend only\nIncoming routing strategy\nN/A\nOutgoing routing strategy\nRound-robin\nZMQ_HWM option action\nBlock …"
October 2, 2013
gozmq的安装与使用教程(zeromq分布式消息队列+golang)
"实现功能:用go实现消息队列的写入与读取(打算用在发送邮件服务)\n环境工具: Centos 64X 6.4 zeromq 3.2.4: zeromq.org golang: http://golang.org/\n一.安装golang( http://golang.org/doc/install) 这一步很简单,只需要从 http://code.google.com/p/go/downloads 下载到服务器,解压到/usr/local/go目录,再设置一下系统变量就可以了.\nwget https://go.googlecode.com/files/go1.1.2.linux-amd64.tar.gz tar -C /usr/local -xzf go1.1.2.linux-amd64.tar.gz 设置系统变量GOROOT\nAdd /usr/local/go/bin to the PATH environment variable. You can do this by adding this line to your /etc/profile (for a system-wide …"
August 23, 2013
Git 常用命令详解(二)
"Git Community Book 中文版 Git 是一个很强大的分布式版本管理工具,它不但适用于管理大型开源软件的源代码(如: linux kernel),管理私人的文档和源代码也有很多优势(如: wsi-lgame-pro)\nGit 的更多介绍,请参考我的上一篇博客: Git 版本管理工具\n一、 Git 命令初识\n在正式介绍Git命令之前,先介绍一下Git 的基本命令和操作,对Git命令有一个总体的认识\n示例:从Git 版本库的初始化,通常有两种方式:\n1)git clone:这是一种较为简单的初始化方式,当你已经有一个远程的Git版本库,只需要在本地克隆一份\n例如:git clone git://github.com/someone/some_project.git some_project\n上面的命令就是将’git://github.com/someone/some_project.git’这个URL地址的远程版本库,完全克隆到本地some_project目录下\n2)git init 和 git remote:这种方式稍微复杂一些,当你本地创建了一个工作目录,你可以进入这个目 …"
August 20, 2013
mysql中的表锁的优化
"一、获取锁等待情况 可以通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺: mysql\u0026gt; show status like ‘Table%’; +—————————-+———-+ | Variable_name | Value | +—————————-+———-+ | Table_locks_immediate | 105 | | Table_locks_waited | 3 | +—————————-+———-+ 2 rows in set (0.00 sec)\nTable_locks_immediate 表示立即释放MySQL表锁数, Table_locks_waited 表示需要等待的MySQL表锁数\n如果Table_locks_waited的值比较高,则说明存在着较严重的表级锁争用情况。这时,需要我们对应用做进一步的检查,来确定问题所在。\n可以通过检查Innodb_row_lock状态变量来分析系统上的行锁的争夺情况: mysql\u0026gt; show status like …"
August 12, 2013
golang中结构体的初始化方法的不同用法(new方法)
"自定义一个结构体\ntype Rect struct { x, y float64 width, height float64 } 初始化方法:\nrect1 := new(Rect) rect2 := \u0026amp;Rect{} rect3 := \u0026amp;Rect{0, 0, 100, 200} rect4 := \u0026amp;Rect{width:100, height:200} 注意这几个变量全部为指向Rect结构的指针(指针变量),因为使用了new()函数和\u0026amp;操作符。\n而如果使用方法\na := Rect{} 则表示这个是一个Rect{}结构类型.两者是不一样的.参考代码:\nfunc main() { a := Rect{} a.x = 15 rect1 := \u0026amp;Rect{0, 0, 100, 200} rect1.x = 10 fmt.Printf(\u0026#34;%v\\n%T\\n\u0026#34;, a, a) fmt.Printf(\u0026#34;%v\\n%T\\n\u0026#34;, rect1, rect1) } 运行结果为:\n{15 0 0 0} main.Rect \u0026amp;{10 0 …"
August 11, 2013
golang中的文档管理
"foo.go\n// CopyRight 2013 The Go Author. All Right reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE fifle. /* Package foo implements a set of simple mathematical functions. These comments are for demonstration purpose only. Nothing more. If you have any questions,please don’t hesitate to add yourself to [email protected]. you can alse visit golang.org for full Go documentation."
August 11, 2013
golang中的map数据类型操作实例
"package main import ( \u0026#34;fmt\u0026#34; ) type stu struct { Name string Age int } func main() { // 声明一个map变量student,键名为string,值为stu var student map[string]stu // 给map变量创建值,同时指定最多可以存储5个stu值 student = make(map[string]stu, 5) // map元素赋值 student[\u0026#34;stu1\u0026#34;] = stu{\u0026#34;zhao\u0026#34;, 25} student[\u0026#34;stu2\u0026#34;] = stu{\u0026#34;zhang\u0026#34;, 28} student[\u0026#34;stu3\u0026#34;] = stu{\u0026#34;sun\u0026#34;, 32} student[\u0026#34;stu4\u0026#34;] = stu{\u0026#34;li\u0026#34;, 40} student[\u0026#34;stu5\u0026#34;] = stu{} //上面方式的简写方法 /* student := …"