Skip to content

Instantly share code, notes, and snippets.

View limboinf's full-sized avatar
🎯
Focusing

limbo limboinf

🎯
Focusing
View GitHub Profile
@limboinf
limboinf / node-tcp-chat.js
Created July 30, 2016 06:54
nodejs 简单的Chat demo.
/**
* Created by fangpeng on 16/7/30.
* node app.js
* Usage: telnet localhost 9000
*/
var net = require("net");
//创建TCP服务器
var chatServer = net.createServer(),
clientList = []; // 保存所有连接的客户端

本文基本上这为两篇文章的翻译和整合 -- Scalable networking And Why are event-driven server so great

OPPC模型瓶颈

传统服务器模型如Apache为每一个请求生成一个子进程。当用户连接到服务器的一个子进程就产生,并处理连接。每个连接获得一个单独的线程和子进程。当用户请求数据返回时,子进程开始等待数据库操作返回。如果此时另一个用户也请求返回数据,这时就产生了阻塞。

这种模式在非常小的工作负荷是表现良好,当请求的数量变得太大是服务器会压力过于巨大。 当Apache达到进程的最大数量,所有进程都变得缓慢。每个请求都有自己的线程,如果服务代码使用PHP编写时,每个进程所需要的内存量是相当大的[1]。

fork()操作延时

@limboinf
limboinf / app.js
Created August 17, 2016 08:27
《Nodejs实战》TOP3继承并扩展EventEmitter事件处理文件监听
var Watch = require('./fswatch'),
fs = require('fs'),
watchDir = './watch',
processDir = './done';
var watcher = new Watch(watchDir, processDir);
watcher.on('process', function (file) {
var watchFile = this.watchDir + '/' + file;
@limboinf
limboinf / jsonhandler.py
Created August 18, 2016 04:40 — forked from mminer/jsonhandler.py
A JSON request handler for Tornado.
import json
import tornado.web
class JsonHandler(BaseHandler):
"""Request handler where requests and responses speak JSON."""
def prepare(self):
# Incorporate request JSON into arguments dictionary.
if self.request.body:
try:
@limboinf
limboinf / reqRss.js
Last active August 19, 2016 10:18
实现串行化流程控制的思路:按 预期执行顺序 将异步 依次 放入数组中(队列),完成一个任务后按顺序从数组中取出下一个。
//Task 1. 判断rss文件是否存在
//Task 2. 解析rss文件
//Task 3. 发起网络请求
//Task 4. 解析rss响应
var fs = require('fs'),
request = require('request'),
htmlparser = require('htmlparser'),
rssPath = './rss.txt';
@limboinf
limboinf / word_count.js
Last active August 19, 2016 10:46
轻松实现并行机制, 只要异步即可.下面是并行统计一个目录下所有文件的单词数.
/*
轻松实现并行机制,统计单词个数
目录结构如下:
├── word_count.js
└── text
├── a.txt
├── b.txt
└── c.txt
@limboinf
limboinf / algorithm.c
Created September 20, 2016 14:27
快速排序
#include <stdio.h>
int a[101], n;
void quicksort(int left, int right)
{
int i, j, t, temp;
if (left > right)
return;
@limboinf
limboinf / .vimrc.perl
Last active December 8, 2016 07:55
我的vim配置,有如下文件和目录: ~/.vimrc ~/.vim/vim_template/vim_header_for_python ~/.vim/vim_template/vim_header_for_sh
set nocompatible " required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
@limboinf
limboinf / global.h
Created December 17, 2016 07:20
数据结构:线性表之顺序表
//
// Created by 方朋 on 16/12/15.
//
#ifndef DATA_STRUCTURES_GLOBAL_H
#define DATA_STRUCTURES_GLOBAL_H
#define OK 1
#define ERROR 1
#define TRUE 1
@limboinf
limboinf / main.c
Created December 21, 2016 14:41
数据结构:单链表
//
// Created by 方朋 on 16/12/20.
//
#include <stdio.h>
#include <stdlib.h>
#include "global.h"