什么是 socket?简述基于 tcp 协议的套接字通信流程。
socket(简称套接字) 是进程间通信的⼀种⽅式, 能实现不同主机间的进程间通信。
流程:
通信双方实例化tcpSocket对象,服务端绑定ip和端口号并执行lisient()方法进入监听状态。
客户端执行connect()方法请求连接,双方完成三次握手建立连接(模块内部实现)。
服务段执行accept()方法获得连接对象,双方实现通信。
通信结束执行close()方法关闭连接。
简述基于 udp 协议的套接字通信流程。
通信双方实例化tcpSocket对象,服务端绑定ip和端口号。
客户端和服务端都可以执行sendto()方法发送数据给指定ip地址和端口号的主机。
客户端和服务端都可以执行recvfrom()方法获得发送给自己的数据以及发送方的ip和端口号。
通信结束执行close()关闭socket对象。
网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?
多进程:
开启多个进程为客户端服务,同一时刻可为多个客户端提供服务,但是任务量大会因为创建进程的开销影响服务器性能。
多线程:
一个进程内开启多个线程,同一时刻只能为一个客户端服务,I/O等待的时间可以进行别的任务,不会浪费时间,不影响服务器性能,推荐使用。
大规模连接上来,并发模型怎么设计?
多进程:
开启多个进程为客户端服务,同一时刻可为多个客户端提供服务,但是任务量大会因为创建进程的开销影响服务器性能。
多线程:
一个进程内开启多个线程,同一时刻只能为一个客户端服务,I/O等待的时间可以进行别的任务,不会浪费时间,不影响服务器性能,推荐使用。
协程:
协程的优势在于函数入口可以是上次停止的地方,显然对大规模连接没什么帮助。
所以这种情况推荐使用多线程来设计并发模式。