问题
Android 中有 LocalScoket
和 Socket
,两者 API 看起来都很像,那么他们有什么差别呢?
解答
Socket 最初用于 TCP/IP 网络通信。在 TCP/IP 协议栈中,由于操作系统隐藏了 TCP/IP 协议,应用程序如果要调用协议,就需要操作系统提供的 Socket 接口。
后来在 Socket 基础上发展出一种 IPC(进程间通信) 机制 Unix domain socket,用于同一台主机之间的进程通信。
虽然 Socket 也可以实现同一台主机的跨进程通信,但是 Unix domain socket 避开的不必要的网络协议栈,因此效率高。
Android 的 LocalScoket 其实是封装了 Unix domain scoket。
所以,LocalSocket 用于 IPC,Socket 用于网络通信。