- 博客(33)
- 资源 (4)
- 收藏
- 关注
原创 项目总结
历时一个多月的地狱式开发(每晚都忙到11点以后,偶尔1、2点,没有节假日和周末),项目终于上线了,虽然有各种问题,但还是觉得应该总结一下得失,便于提高自己。由于刚转岗到现在的部门,刚来就参与了项目,负责的是项目中的一个模块,属于核心业务,而且之前完全没接触过这块的业务,亚历山大。项目开始第一周,天天开会,基本就是在开会中度过,下午开会,晚上开会,每次会议都要2、3个小时,结果一个星期过去了,项目几...
2018-04-18 20:22:23
394
原创 nsq源码阅读 nsqd源码四 nsqd/lookup.go 与nsqlookupd服务的交互
NSQD对象的Main()方法中有一段代码:n.waitGroup.Wrap(func() { n.lookupLoop() })启动一个goroutine,处理与nsqlookupd进程的交互。封装在nsqd/lookup.go中。这个goroutine的主要功能有:1、连接nsqlookupd服务,执行IDENTIFY操作;2、将nsqd的Metadata中的topic、channel注册到n...
2018-02-08 17:08:38
673
转载 golang中json与struct中tag简介
使用Golang 的 encoding/json 库已经提供了很好的封装,可以让我们很方便地进行 JSON 数据的转换。Go 语言中数据结构和 JSON 类型的对应关系如下表:golang 类型JSON 类型注意事项boolJSON booleans 浮点数、整数JSON numbers 字
2018-02-02 14:03:10
20142
转载 go语言的字节序
最近在看nsq的源码时候,发现它处理message的时候,都会采用字节序进行数据包的处理,于是我觉得有必要深入了解下TCP协议中 字节序的知识字节序(Byte Order)我们一般把字节(byte)看作是数据的最小单位。当然,其实一个字节中还包含8个bit (bit = binary digit)。 在一个32位的CPU中“字长”为32个bit,也就是4个byte。在这样的CP
2017-12-07 16:05:53
9706
2
原创 nsq源码阅读 nsqd源码三 tcp.go
NSQ的TCP逻辑都是这样的,调用internal/protocol/tcp_server.go中的TCPServer:func TCPServer(listener net.Listener, handler TCPHandler, l app.Logger)接受客户端连接,在这里客户端为consumer,调用TCPHandler.Handle处理业务逻辑,TCPHandler.Ha
2017-11-21 18:28:09
750
原创 nsq源码阅读 nsqd源码二 nsqd/nsqd.go
查看nsqd模块的入口文件apps/nsqd/nsqd.go可知,nsqd模块从开始到结束经历了5步:1、初始化nsqd实例nsqd.New();2、读取元数据nsqd.LoadMetadata();3、保存元数据nsqd.PersistMetadata();4、主方法nsqd.Main();5、程序终止nsqd.Exit()初始化初始化时设置了--data-p
2017-06-01 17:14:20
614
原创 nsq源码阅读 nsqd源码一 apps/nsqd/nsqd.go
之前已经将NSQ的nsqlookupd模块源码大致的看了一遍了,现在开始阅读nsqd模块的源码。作为NSQ的核心模块,代码量也相对多点。废话不多说,开始读代码。首先从mai()方法开始:func main() { prg := &program{} if err := svc.Run(prg, syscall.SIGINT, syscall.SIGTERM); err != nil {
2017-05-24 18:19:53
1538
原创 Golang实战-一个聊天室的实现二
在上一篇《Golang实战-一个聊天室的实现》中,我们按照书上写了个简单的聊天室,今天我们来加点我们自己的东西:可新增房间,并切换房间。要想新建房间,得有个房间的对象,保存房间的一些基本信息:type RoomInfo struct { Name string `json:"name"` //删除房间时用,只有房间创建者可删除 CreaterId strin
2017-05-23 17:25:25
1577
原创 Golang实战-一个聊天室的实现
《Go语言程序设计》中第8.10节有个聊天室的例子,我们就来跟着完成这个例子。不用使用任何第三方包,基于命令行,方便学习。
2017-05-18 15:36:48
8793
2
原创 nsq源码阅读 nsqlookupd源码五 http.go http_server.go
再来看看关于HTTP的处理逻辑:httpServer := newHTTPServer(ctx)新建HTTP实例,跟踪代码,nsqlookupd/http.go:package nsqlookupdimport ( "fmt" "net/http" "net/http/pprof" "sync/atomic" "github.com/julienschmidt/
2017-05-16 14:41:35
853
原创 nsq源码阅读 nsqlookupd源码四 lookup_protocol_v1.go
阅读nsqlookupd/tcp.go源码时,有一段代码:err = prot.IOLoop(clientConn)对TCP数据处理的核心逻辑,对应的代码就是nsqlookupd/lookup_protocol_v1.go,现在来阅读这里的代码:package nsqlookupdimport ( "bufio" "encoding/binary" "encoding
2017-05-03 17:36:58
835
原创 nsq源码阅读 nsqlookupd源码三 tcp.go tcp_server.go
nsqlookupd.go中对TCP的处理代码为protocol.TCPServer(tcpListener, tcpServer, l.opts.Logger)用户监听处理nsqd发送的信息TCPServer在internal/protocol/tcp_server.go中定义:package protocolimport ( "fmt" "net" "runt
2017-05-02 16:26:03
472
原创 nsq源码阅读 nsqlookupd源码二 registration_db.go
RegistrationDB,字面意思:注册数据库,保存nsqd的注册信息,这里提供一系列增、删、改、查的操作封装
2017-05-02 14:29:38
735
原创 golang实战--实现短地址服务
golang写的简单的短地址服务,只做练手用,还有很多不完善的地方TODO:验证URL的有效性;确认URL的协议(http、https)数据库操作优化现在的路由太简单了下面贴上代码package mainimport ( "database/sql" "fmt" "net/http" "io/ioutil" "encoding/json" _ "
2017-04-11 15:40:02
2809
原创 nsq源码阅读 nsqlookupd源码一 nsqlookupd.go
查看nsq的几个模块,发现nsqlookupd模块的代码量最少,所以从它开始。从nsqlookupd/nsqlookupd.go文件开始:package nsqlookupdimport ( "fmt" "log" "net" "os" "sync" "github.com/nsqio/nsq/internal/http_api" "github.com/nsqio/n
2017-03-23 10:17:50
717
原创 golang线程同步WaitGroup简介
WaitGroup用于线程同步,WaitGroup等待一组线程集合完成,才会继续向下执行。 主线程(goroutine)调用Add来设置等待的线程(goroutine)数量。 然后每个线程(goroutine)运行,并在完成后调用Done。 同时,Wait用来阻塞,直到所有线程(goroutine)完成才会向下执行。对官方的代码做简单修改:package mainimport ( "
2017-03-14 18:00:59
45561
转载 golang读写锁RWMutex
读写锁是针对读写的互斥锁基本遵循两大原则:1、可以随便读,多个goroutine同时读2、写的时候,啥也不能干。不能读也不能写RWMutex提供了四个方法:func (*RWMutex) Lock // 写锁定func (*RWMutex) Unlock // 写解锁func (*RWMutex) RLock // 读锁定func (
2017-03-14 16:15:50
1545
原创 ThinkPHP中_after_update、_before_update等的用法
TP系统\Think\Model类里隐藏了几个有用的方法:_before_insert、_after_insert、_before_delete 、_after_delete、_before_update、_after_update、_after_select。。。。。。但是在手册里并没有列出来,只有在源码中才能看到。新建个测试类ArticleModel.class.php
2015-12-17 13:51:10
11020
原创 PHP设计模式——装饰器模式(decorator)
如果已有对象的部分内容或功能性发生改变,但是不需要修改原始对象的结构,那么使用装饰器设计模式最适合。学习面向对象都知道,面向对象的三大特性,其中继承,在实际编程中,被大量的使用。但是如果一个类的子类过多,那么相应的代码就会牺牲编程人员的理解力和可维护性。通常,我们应该竭力保证,一个对象的父--子关系不超过3个。创建过多的父--子关系,那么代码就会变得混乱和难以控制。对于某些问题来说,使用基于装饰器
2015-10-20 14:07:24
1216
原创 PHP设计模式——建造者模式(builder)
建造者模式是将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,它着重于一步步构造一个复杂对象。class product{ protected $_type = ''; protected $_size = ''; protected $_color = ''; public function setType($type){ $this->_type =
2015-10-08 11:08:48
577
原创 PHP设计模式——适配器模式(Adapter)
在应用程序中,你也许会使用一个文档的代码库,然而,我们常常要添加新的功能,这些功能要求使用不同的方式使用现有的对象。可能新功能只是需要一个不同的名字,也可能是新功能需要与原有的对象稍有不同的行为。 针对上述问题,采用适配器模式是个很好的解决方案。使用适配器模式创建另一个对象,这个Adapter对象充当了原始应用与新功能之间的中介。适配器设计模式只是将某个对象的接口适配为另一个对象所期望的接口
2015-09-21 17:24:26
481
转载 50个非常有用的PHP工具
PHP is one of the most widely used open-source server-side scripting languages that exist today. With over 20 million indexed domains using PHP, including major websites like Facebook, Digg and WordPr
2015-07-02 17:20:09
1134
原创 codeigniter中count_all_results()问题
SQL语句是这样的: $this->db->select('*')->from('mytable'); $count = $this->db->count_all_results() ; $config = array( 'base_url' => '/financing/dayconsumption', '
2015-04-02 11:55:34
4061
2
原创 codeigniter MySQL加减运算
使用codeigniter更新MySQL时,如果要用到MySQL的加减运算,可以这样做:$this->db->set('field', 'field+1', FALSE);$this->db->update('mytable'); 如果插入时要用到加减运算的话,可以用:$this->db->insert('mytable');set() 也接受可选的第三个参数($escap
2015-03-31 15:32:58
1239
原创 phpmailer发送邮件失败
在用phpmailer发送邮件时,本地都是好的,到服务器上就不行了,提示发送成功,但受不到邮件,firebug查看提示连接不上邮件服务器。在网上找了很久,最多的说法是这样:更改phpmailer的class.smtp.php文件:$this->smtp_conn = @fsockopen( $host, // the host of the server
2014-12-23 18:43:52
2251
原创 PHP手册中empty()和isset()的解释和区别
empty(PHP 4, PHP 5)empty — 检查一个变量是否为空说明bool empty ( mixed$var )如果 var 是非空或非零的值,则 empty() 返回 FALSE。换句话说,""、0、"0"、NULL、FALSE、array()、var $var;以及没有任何属性的对象都将被认为是空的,如果var 为空,则返回 TRU
2014-07-23 14:34:39
504
原创 PHPExcel导出数据出现500 Internal Server Error
在用PHPExcel导出数据时,出现了500 Internal Server Error报错,
2014-07-23 10:58:39
5980
1
游戏开发中的人工智能
2015-02-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人