YGF's Blog


腾讯开源协程库libco分享

讲libco之前先说一下什么是协程协程,也叫 coroutine 用一句话可以理解为用户级的线程

大家都知道线程是操作系统提供的

如 windows 使用api CreateThread

linux 使用 pthread_create 来创建线程

可以理解为,线程是系统级的。

那协程则是用户级的,比如某些语言自带coroutine

golang 的 goroutine

lua 等等

还有一些是第三方实现的 coroutine 库

...


ytran 反连socket5代理【golang】

SSL的反连socket5代理

使用场景:

目标机器在内网,能反连出来

需要一台公网机器

Usage:

    -listen  [port1] [port2]

    -connect [ip]    [port]

    -help

在公网机器使用-listen命令监听 port1=socket5端口 port2=ssl服务端口

在内网机器使用-connect命令连接ssl服务端口

$ ./ytran -listen 1080 9001
$ ./ytran -connect 8.8.8.8 9001

浏览器 8.8.8.8:1080 socket5

使用golang编写,无第三方包

客户端与服务端连接使用SSL单连接通信

golang编译环境:http://pan.baidu.com/s/1hq1mrDM

go build ytran.go

可在linux、osx、windows等环境使用

编译出可执行文件可直接在目标机器上使用

下一个版本功能

1、增加数据压缩

2、优化网络环境差的情景

3、增加端口转发功能

GitHub https://github.com/cn-ygf/ytran


脱离VC运行库 编译出极小的程序

大家都知道,用VC编译出来的HelloWorld也有几十KB,这样体积非常大,没有win32 汇编这么爽

下面的代码实现win32汇编的效果(体积小)

//////////////////////////////////////////////////////////////////////////
//脱离了VC runtime 不能使用C语言和C++的函数库;
//在Release编译基础上修改;
//缓冲区安全检查改成否 /GS-
//代码生成 运行库 多线程DLL /MD

#include <Windows.h>
#pragma comment(linker,"/ENTRY:wWinMainCRTStartup")        //更改入口点;
#pragma comment(linker, "/nodefaultlib")                   //忽略所有默认库;


//////////////////////////////////////////////////////////////////////////
//用API实现的new和delete;
void *operator new[] (unsigned int size) 
{ 
        return HeapAlloc (GetProcessHeap(),NULL,size); 
} 
void operator delete[] (void* memblock) 
{ 
        HeapFree (GetProcessHeap(),NULL,memblock); 
}

class Fuck
{
public:
        int a;
        int c;
        void abc()
        {
                MessageBox(NULL,L"成员函数",L"测试",MB_OK);
        }
};


VOID WINAPI wWinMainCRTStartup(VOID)
{
        Fuck * fuck = new Fuck[1];
        fuck->abc();
        delete []fuck;
        MessageBox(NULL,L"正常运行",L"哈哈",MB_OK);
}

工程打包 (VS2013) win32.zip

github

大家可以在一台没有装VC2013运行库的机器上试验