栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

去TCP读取是非阻塞的

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

去TCP读取是非阻塞的

Reader
可以返回部分数据。从该文档,“如果某些数据是可用的,但不是LEN(P)个字节,读取常规返回什么是可用的,而不是等待更多。”

无论使用哪种语言,这都是一个问题,即使在C语言中碰巧对您有用:TCP只是提供了可以随时写入的字节流。从设计上讲,单次写入可能会分解为多个数据包进行传输,并且没有向接收方发送的内置信号说明单次写入/消息/请求在何处结束。该应用程序必须找出自己的信号边界方法。这可能意味着定界符(

n
)或隐式或显式的字节计数(HTTP
Content-Length
是显式的)。

要读取特定数量的输入字节,您需要

io.ReadAtLeast
io.ReadFull
。要读取直到满足某些任意条件
Read
,只要没有错误,就应该在调用上循环。(然后,您可能想对太大的输入进行错误处理,以防止不良的客户端占用服务器资源。)如果要实现基于文本的协议,则应考虑使用
net/textproto
,它会将a
bufio.Reader
放在连接的前面,以便您可以读行。要限制您等待多长时间才能完成读取(以使行为不正常的客户端无法永远挂断goroutine并永远使用内存等),请查看名称中的
net
函数
Deadline
(与上的
Timeout
函数相关)
Error
类型)。的
context

软件包可帮助管理超时,期限和取消,并且在例如要编写一台复杂的服务器来对每个请求执行许多网络操作的情况下特别有用。

该示例代码可能存在不相关但很重要的问题:它丢弃了

Read
and中的错误
Write
。这可能掩盖了简单的问题,并使它们很难调试。如果考虑了部分读取后仍遇到问题,请先检查所有错误,然后再寻求更多帮助。查看
errcheck
以确保不会将此类错误付诸实践。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/417776.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号