demo
C++ JavaScript Erlang
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
README.md
async_socket.h
diff_delta.h
dns.js
eproxy.erl
http_message.h
luaxx_asio.cpp
moz_websocket.cpp
proxy.cpp
ws_rpc.erl

README.md


luaxx_asio.cpp boost.asio 的lua接口


async_socket.h

异步socket实现, 对 boost.asio 中异步 socket io 的封装, 使异步socket调用表现为同步调用。

实现这一点的关键是代码中的$await 语句,它保存当 前上下文并挂起,异步调用完成后恢复执行。

目前最新版本 boost 中的 coroutine 库经过适当封装可实现相同功能。


http_message.h

http 请求/应答处理,支持长连接(keep-alive)和Chunked Transfer Encoding. 嵌入式 http server 的一部分。

proxy.cpp

代理服务器主程序,包括HTTP代理,DNS转发,SOCKS4代理。

这两个程序均采用异步编程,基于boost.asio 和 boost.context。异步编程模型已经在Node.js 中有成功应用。采用异步模型可以减少线程使用数量,因而减少线程同步和切换的开销。线程数 量减少也减少了锁(lock)的需求,降低程序死锁和阻塞的可能性,而多线程死锁有时是很难调 试的。程序复杂性也可以得到有效降低。

如果有异步编程经验应该有体会,一个过程中如果异步调用很多的话通常会使程序逻辑复杂化, 过程中如果包含循环等非顺序控制流的话更是如此。有时还不得不在过程中维护一个状态机。

在上面的演示程序中可以看到,没有通常异步过程中常见的深层次嵌套调用,编程体验与普通同 步代码完全一样,但运行时仍然是异步的。


dns.js

dns 读写库,mozjs 运行库的一部分, 支持常用 dns record的读写。mozjs 是一个类似 Node 的 javascript开发环境, 采用 Mozilla spidermonkey javascript 引擎。

moz_websocket.cpp

mozjs websocket c++ 扩展,为 mozjs 提供 websocket 支持。可以看到,用 c++ 扩展 mozjs 是非常容 易的。


diff_delta.h

二进制数据比较/合并,可读取和生成 git 兼容的 delta 格式。git 版本控制系统的一部分。


ws_rpc.erl

服务端与浏览器双向调用的websocket rpc模块, erlang 实现.


eproxy.erl

代理服务器,支持socks4和dns转发,erlang实现。