最近工作中是有网络方面的需求,在这里写一些golang网络server端的一些内容。还是有诸多的点没有想明白;
1)一个server端的例子;
2)epoll,每当有数据的时候就会有这么一个事件么,都是有事件的,这里就是fd的驱动,这里就是fd的驱动,为什么fd忽悠
fd上如果是注册了poll函数,一个关键点,socket都是有等待队列的,然后自己就是等待队列的客户之一。
什么叫做socket上有数据来了。当然
现在还是有两个地方不是非常清楚;
1)对于接受到的数据,在socket层面是个什么摆放的格式,数据结构是什么?
2)对于epoll机制的消息通知,是说有数据来了就通知,如果不同的fd有不同的数据获取的方式;比如,如果是监听的fd的话,那么他就应该是用accpt去获取数据,如果是普通的链接,那么就通过recvfrom去获取数据。
3)通知有数据是怎么通知的?来了一个字节也也去通知的吗?拿肯定是读完了之后,肯定是socket记录了,用户态读了多少的数据出来,这个时候如果用户没有全部都读全,那么还是会触发一个事件过来吗?肯定不会啊,因为用户知道了上面有数据之后,肯定是一个while循环去读了,直到把所有的数据全部都耗尽为止。如果从驱动侧新来了数据,那么数据仍然是OK的,这完全是一个异步的过程,可能用户前一次已经把数据都消费完了,也都说不定。