一些关于S5W2C并发问题的思考

在使用S5W2C的时候,有时会遇到这样一个问题,连接数较多的时候会造成阻塞,导致客户端的连接超时。不确定是系统的调度原因(或线程数限制之类)还是其他问题。我使用的是协程(coroutines)来处理这些连接,原本我认为这样可以避免为每个socket创建一个线程,但是对于传统的BIO socket而言(java.io.Socket),每个socket仍然会造成整个线程阻塞,这意味着协程并不会达到我想要的效果。NIO或AIO的socket或许能解决这样的问题,但在项目中只有接收端(server)能使用这样的socket,因为要通过移动数据发包,只能使用android.net.Network.socketFactory来创建socket。而要突破这样的限制,似乎只能通过获取root权限。

于是我又有了另一个想法:用go来重写Socks5服务器,这里面涉及到移动数据发包的部分同样需要root权限,但用go来实现协程会比kotlin好写。不过我还没了解过如何使得kotlin与go交互,大致的想法是把go编译为.so文件,然后kotlin里面通过JNI来交互,具体实现就不清楚了。

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注