Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android:TCP环回套接字连接的替代方案,以获得更好的性能_Android_Sockets_Android Ndk_Loopback_Unix Socket - Fatal编程技术网

Android:TCP环回套接字连接的替代方案,以获得更好的性能

Android:TCP环回套接字连接的替代方案,以获得更好的性能,android,sockets,android-ndk,loopback,unix-socket,Android,Sockets,Android Ndk,Loopback,Unix Socket,使用Android NDK(2.3及以上版本)开发了一个网络库 Scenerio 第三方应用程序(基于TCP套接字)与本机库通信 我们的图书馆处理这些数据,并反过来与 服务器使用TCP套接字通信。沟通是 双向的 我们设计并实现了第三方应用程序和我们的IPC库之间的套接字通信机制。我们的库正在利用第三方应用程序端口(默认值:6700)在服务器之间建立连接 所以,这是一种环回连接,我们的库和第三方应用程序之间通过它进行通信 int on = 1; setsockopt(s, SOL_SOCKET

使用Android NDK(2.3及以上版本)开发了一个网络库

Scenerio

  • 第三方应用程序(基于TCP套接字)与本机库通信
  • 我们的图书馆处理这些数据,并反过来与 服务器使用TCP套接字通信。沟通是 双向的 我们设计并实现了第三方应用程序和我们的IPC库之间的套接字通信机制。我们的库正在利用第三方应用程序端口(默认值:6700)在服务器之间建立连接

    所以,这是一种环回连接,我们的库和第三方应用程序之间通过它进行通信

      int on = 1;
    setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
    bind(s, (struct sockaddr *) &sin, sizeof (sin));
    
    问题区域


    一切正常,但由于它,性能被降级。如果没有网络库,则通信速度非常快。为了验证问题是否存在于环回tcp套接字中,我们删除了库的所有内部处理。该库仅充当应用程序的伪服务器(传递)。应用程序将数据发送到localhost和socket,而库只是按原样将数据转发给服务器。

    >查询

    那么有什么方法可以提高性能呢

    1) Android上的UNIX域套接字如何,它们可以在应用程序和我们的库之间使用吗

    2) 绑定器可以用于用户级应用程序和本机Android库之间的通信吗

    3) 或者我们是否有类似于IOCTL SIO_LOOPBACK_FASTPATH的东西(TCP LOOPBACK FASTPATH由应用于发送和接收套接字的套接字IOCTL SIO_LOOPBACK_FASTPATH启用)


    事先非常感谢

    是的,是的。unix域套接字将消除对其他组件不需要的网络权限的需要。理论上,它可能会消除TCP nagle算法延迟,但希望环回接口足够智能,无论如何都能避免这种情况。java组件之间的绑定比本地组件更容易,但本地使用它并非不可能。如果此工作代码处于一个与Android保持一致的过程中,您将有一个更轻松的时间-比如说作为一个Android服务,在这一点上连接活页夹应该是很简单的。@Chris,那么您的意思是说tcp环回可能已经在处理延迟问题了吗?性能比什么降低了?如果没有网络库,通讯很快。请注意,我删除了库的所有内部逻辑,以验证是否相同。该库只是作为应用程序的伪服务器。由于您已经有了基于套接字的代码,切换到unix域套接字将是一个简单的实验,可以尝试并了解它的作用。虽然在测试中不清楚您是如何将时间本地化到进程间通信的,因为您仍在与外部网络服务器通信,这可能需要一些时间。要真正测试IPC,您可能需要另一个本地端立即回复,而无需联系远程服务器。(您链接的特定TCP环回选项是最新的windows服务器,不直接适用于linux/android)。