Socket是什么
学习微服务框架时,了解到,微服务之间的调用其实是RPC,即远程过程调用。不同于本地调用,远程调用的过程中,需要通过网络请求,将方法所需参数发送到服务端,服务端处理完成后,再把处理结果返回。这其中,有两个关键的步骤,一是参数或结果的序列化与反序列化,二是网络请求协议。
最常见的微服务RPC协议应该是HTTP REST,这是因为它是相对简单的。但事实上,HTTP协议是运行于TCP之上,主要应用于浏览器与服务器之间的交互。所以,它的一些安全性设计(握手机制),在远程调用时,反而制约了其效率,倒不如直接使用TCP来得痛快。而要用TCP,就要用到Socket。
Socket翻译为套接字,网络交互,其实是若干个端点通过网络通道进行交互。而Socket,则用于标志某个端点,即该端点的地址,主要内容为IP地址和端口号。
在网络五层架构中,TCP位于传输层,传输层之上,是由应用层,表示层,会话层合而为一的应用层,其中即为用户进程。Socket就位于传输层和应用层之间,是一个抽象层。
Java的Socket
Java提供了Socket和ServerSocket来帮助完成Socket通信。
服务端步骤:
创建ServerSocket实例并绑定商品。调用accept,监听商品,等待客户端消息。接收消息并处理,关闭服务。客户端步骤:
基于服务端IP及端口构建Socket。发送消息。关闭服务。代码示例
服务端代码如下:
服务端代码 客户端代码如下:
客户端代码