IT技术博客大学习 共学习 共进步
首页 / idea's blog
IT 2014-12-04 13:18:23 / 累计浏览 3,460

构建C1000K的服务器(2) – 实现百万连接的comet服务器

这是关于 C1000K 序列文章的第二篇, 在前一篇文章 构建C1000K的服务器(1) – 基础 中, 介绍了支持 C1000K 的 Linux 系统的内核参数调整和系统设置. 在本篇文章中, 将对一个真正的应用服务器做 C1000K 测试.

IT 2014-12-04 13:17:16 / 累计浏览 4,120

构建C1000K的服务器(1) – 基础

现在, 该是考虑 C1000K, 也就是百万连接的问题的时候了. 像 Twitter, weibo, Facebook 这些网站, 它们的同时在线用户有上千万, 同时又希望消息能接近实时地推送给用户, 这就需要服务器能维持和上千万用户的 TCP 网络连接, 虽然可以使用成百上千台服务器来支撑这么多用户, 但如果每台服务器能支持一百万连接(C1000K), 那么只需要十台服务器.

IT 2014-12-02 23:34:15 / 累计浏览 3,360

Linux 安装 Nginx PHP fpm

网上的很多 Linux 操作系统下安装 Nginx + PHP 的教程都很老, 而且各种依赖, 对于初学者来说比较容易混淆, 所以, 我重新写了此篇博客, 用于介绍最简单的 Linux 下安装 Nginx + PHP 的方法.

IT 2014-11-23 21:33:03 / 累计浏览 2,280

小心 int 乘法溢出!

C/C++ 语言里, 绝大部分平台上 int 类型是 32 位的, 无论你的操作系统是否是 64 位的. 而一些常用的函数, 如 malloc(), 它接受的参数是 size_t 类型。。。

IT 2014-11-19 23:01:54 / 累计浏览 1,880

jQuery 设置复选框选中状态的 BUG

在以前, 如果想做一个全选和全不选的功能, 用 jQuery 非常简单, 就是设置 checked 属性. 但今天见鬼了, 以前能正常工作的代码无论如何也不能工作.

IT 2014-11-06 23:55:43 / 累计浏览 1,940

如何让 PHP json_encode 函数不转义中文?

如果你调用 PHP 自带的 json_encode() 函数, 碰到中文时, 中文会被转义掉. 这非常恼人, 像是一堆乱码, JSON 标准从来没有说要把非 ASCII 字符转义, 标准说的是”Any UNICODE character”. 如何禁用掉这种转义呢? 答案是, PHP 自带的 json_encode() 不能禁用这个特性(在 5.4.0 版本之前), 你只能换一个新的 JSON 库. 为了简单, 我简单写了几十行代码, 实现一个 json_encode().

IT 2014-02-18 12:34:38 / 累计浏览 4,080

TCP网络协议以及其思想的应用

大部分程序员都听说过 TCP/IP 网络协议, 或者都写过 TCP socket 网络的程序, 甚至还学过 TCP 原理, 少部分看过 TCP 协议的某一个实现版本. 不过, 真正掌握 TCP 原理及思想的人, 我觉得不多. 只有理解了 TCP 原理及实现, 并且把它背后的思想和技术活学活用到其它的领域, 那才算是真正掌握了 TCP.

IT 2013-10-29 23:02:33 / 累计浏览 3,880

Web 开发程序员谈网游服务器开发

今天参加了一个和某网游开发团队的交流, 感受到了网游开发和 Web 开发之间的巨大差异, 所以我写了本篇博文. 传统的网游开发者可能由于更大的精力放在游戏逻辑上面, 并且因为游戏客户端是一个高度内聚逻辑复杂的终端程序, 所以网游开发者在开发服务器端的时候, 也容易把客户端的经验放在服务器端, 很少考虑动态可扩展性和服务容灾性.

IT 2013-10-15 13:59:04 / 累计浏览 4,140

用TAB缩进, 用SPACE对齐

TAB vs SPACE 是一个争论不休的话题. 不过, 对于大部分编程语言, 混用 TAB 和 SPACE(空格) 缩进也可以正常工作, 除非你用的是语法非常傻逼的语言如 Python(仅仅是语法傻逼, Python 的对象模型和库还是很有用的, 大家可以试试 Cpy 编程语言 – 用 C 语言语法写 Python 代码).

IT 2013-09-04 23:25:23 / 累计浏览 4,840

人人都用 Retina 屏幕的 MacBook Pro 笔记本电脑

以我使用苹果笔记本的经验, 我认为人人都应该使用带 Retina 屏的 MacBook Pro, 我目前为止, 我和我的同事们一共已经有了 3 台 rMBP, 还包括几台 MBP, 每个人都认为物超所值.

IT 2013-08-21 13:29:15 / 累计浏览 1,760

在线状态服务在网站系统中的应用

在线状态服务, 是这样的一个服务, 它维护了网站当前的在线用户列表, 接受其它模块的查询. 是实现统计网站同时在线人数, 维护在线用户列表等功能的基础服务. 在Facebook的聊天系统中, 在线状态是为聊天系统服务的, 所以在线状态是一种”强”在线, 也即用户保持着和Comet服务器的连接, 可随时接受服务器推送(push)的消息.

IT 2013-08-21 13:09:24 / 累计浏览 1,900

SSDB 配置文件

SSDB 的配置非常简单, 附带的 ssdb.conf 你不用修改便可以使用. 如果你要高度定制, 还是需要修改一些配置的. 下面做介绍.

IT 2013-08-13 13:04:08 / 累计浏览 5,600

谈谈Facebook的聊天系统架构

今天看到一份 Facebook 公司 2009 年的 PDF, 介绍它的聊天系统架构, 其中的一张图结构非常清晰, 所以我对这张图谈谈我的看法。

IT 2013-07-31 13:18:59 / 累计浏览 4,380

JavaScript 设置浏览器标题闪动

当有新消息或者网页有Ajax内容变动时, 可以闪动浏览器标题(或者Tab标题), 提示用户。

IT 2013-05-15 23:08:42 / 累计浏览 1,860

Cocoa处理JSON转换, 兼谈计算机语言的哲学

用了下 Objective-C Cocoa 里的 JSON 相关类 NSJSONSerialization, 发现简单的事情突然变得太复杂了. 想想用 php 语言的时候, 如果想把 php 语言对象转成字符串, 直接 json_encode(); 如果想把网络或者文件中的一段二进制数据(JSON 字符串)转成 php 对象, 直接 json_decode(). 但是, 在 Cocoa 里就不那么直接了. 首先, 你会遇到字符编码的问题, 所以你得到的和操作的不能是字符串, 而是 NSData. 其次, NSJSONSerialization 无谓地增加了限制, 顶层 Objective-C 对象只能是数组和字典. 我不想探讨这里面的原因, 我当然知道这里面的原因, 我只是说, 这些原因可以避免.

IT 2013-02-27 23:12:12 / 累计浏览 2,840

苹果 Mac OS X 系统下锁屏的快捷键

先提提互联网上果粉对于”Mac 系统锁屏的快捷键是什么?”这个问题的回答: 1. 不用锁屏, 直接啪的一下盖子盖上了, 既方便又洒脱. 2. Finder - 应用程序 - 实用工具 - 钥匙串访问… blabla… 3. 创建一个脚本, 启动一个服务, keychain access…

IT 2013-01-16 14:09:55 / 累计浏览 3,220

LevelDB 的原理和动机

写硬盘:为了持久化, 必须写硬盘。 Log 文件:为了快速写入硬盘, 必须采用追加方式顺序写到 log 文件. 这导致 log 文件中的数据是无序的。 sst 文件:为了快速从硬盘中读取数据, 基于查找算法和局部性原理考虑, 必须将数据排序组织到 sst 文件中。 多个 sst 文件而不是单个:为了快速的插入数据到 sst 文件中, 必须使用多个 sst 文件, 每个 sst 文件只保存一定范围的数据. 堆。 Levels:为了减少 log 文件合并所影响的 sst 文件个数, 将 sst 按层次组织, 层次越深, 文件数量越多. 最坏的情况, 每一次合并都会修改该层次所有的 sst 文件. 而层次越深, 合并发生的概率越小. 树。 Bloom Filter:由于 LevelDB 在某一层查找不存在的数据时, 会继续在下一层进行查找, 所以对于不存在的数据的查找会速度非常慢. 所以, 需要结合 Bloom Filter, 利用 Bloom Filter 能快速地判定”不存在”的特点.​

IT 2012-12-16 23:56:24 / 累计浏览 4,840

宽带网络运营商劫持网站的技术分析

最近, 家里用的宽带通网络服务非法劫持网页流量, 修改正常的网页请求的响应, 然后在这个非法的响应里通过 iframe 来访问正常的网站. 不管是大网站还是小网站, 都中招, 例如 amazon, qq 等. 而且, 由于浏览器的缓存, 直接用浏览器来查看源码可能看不到被修改的非法响应, 用网络抓包工具, 或者自己 telnet 发 HTTP 请求看得比较清楚.

IT 2012-11-02 13:13:39 / 累计浏览 10,380

基于Redis构建系统的经验和教训

Redis 是一个非常快速和强大的 Key-Value 存储(持久化)系统, 相对于一般的 NoSQL 存储系统, 它最大的特点是支持丰富的数据结构. 特别是其 zset(sorted set)数据结构, 堪称表达能力最强的结构之一(其它强大的数据结构如 sorted hashmap), 可以直接地表达业务逻辑.