ProxymanApp / ProxymanApp/Proxyman
Rewrite ProxymanCore with Swift NIO
Open
@NghiaTranUIT is already working on this.
Since May 8, 2020.
✅ Done
- Dominant language
- No language data
- Stars
- 7k
- Forks
- 237
- PR merge metrics
- No merged PRs in 30d
Description
Description
ProxymanCore v1 is built on top of CocoaAsyncSocket, which has some major problems:
- Don't Support HTTP/2, we have to manually implement it, which is error-prone
- Not an HTTP Server, so we have to deal with all HTTP Message Parsers
- CocoaAsyncSocket doesn't seem active anymore. We encountered random crashes from deep inside the socket with no reason. (Ex: Crash in SSL_Handshake, closeSocket, ...)
- ProxymanCore v1 architecture is not good for extending for future features, such as SOCK Proxy, ReWrite, gRPC...
- Poor performance in some cases since CocoaAsycnSocket doesn't tend for high-performance network tools with multiple incoming/outcoming requests, response
It's time to move to Swift NIO, which is a cross-platform asynchronous event-driven network application framework for rapid development of maintainable high-performance protocol servers & clients.
Other benefits would be:
- Built-in HTTP Server
- Officially support HTTP/2
- Has gRPC 3rd-party
- Use BoringSSL so we can get rid of spawn a
opensslto generate certificates => Suitable for iOS app - Highly reusable on iOS and Linux (Window is possible in the near future)
- Battle-testing and active development from Apple Team 🙌
......
Examples: - HTTP/2: https://github.com/apple/swift-nio-http2
- SSL: https://github.com/apple/swift-nio-ssl
- Proxy: https://github.com/apple/swift-nio-examples/tree/master/connect-proxy
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.