迷茫的tom
发表于 3 天前
<div class="quote"><blockquote><font size="2"><a href="https://hostloc.com/forum.php?mod=redirect&goto=findpost&pid=16044006&ptid=1365358" target="_blank"><font color="#999999">欧阳逍遥 发表于 2024-11-19 17:50</font></a></font><br />
你应该把 服务端 和 客户端代码都贴出来。。。<br />
<br />
客户端可以循环读, 但是也要服务端 循环发才行。</blockquote></div><br />
<br />
他一直只能读一次的原因,很大概率是客户端的问题,客户端不一直发消息,服务端哪里能收到消息噢<br />
但是他自己估计一直在懵逼,因为我推测他连短连接长连接,还有tcp/udp都不清楚,所以你们跟他说什么数据包包头之类他才啥都不知道,甚至连自己在问啥估计都还懵逼着<br />
不过也很正常,谁都是从小白过来的<br />
<img src="https://hostloc.com/static/image/smiley/yct/007.gif" smilieid="46" border="0" alt="" />
zhou
发表于 3 天前
<div class="quote"><blockquote><font size="2"><a href="https://hostloc.com/forum.php?mod=redirect&goto=findpost&pid=16044020&ptid=1365358" target="_blank"><font color="#999999">puper 发表于 2024-11-19 17:52</font></a></font><br />
不可能用一个conn变量做到的</blockquote></div><br />
确实瓶颈了,有没有什么曲线救国的方案呢?
puper
发表于 3 天前
<div class="quote"><blockquote><font size="2"><a href="https://hostloc.com/forum.php?mod=redirect&goto=findpost&pid=16044046&ptid=1365358" target="_blank"><font color="#999999">zhou 发表于 2024-11-19 17:57</font></a></font><br />
确实瓶颈了,有没有什么曲线救国的方案呢?</blockquote></div><br />
从conn读出来, 分发成你需要的个数
loop321
发表于 3 天前
<br />
项目中的代码,可以参考一下:<br />
<br />
<br />
// 格式化请求参数<br />
// copy 重新写入reqbody 默认写入<br />
func CopyReqAndFormData(req *http.Request, copy ...bool) {<br />
//获取请求体内容<br />
bodyBytes, _ := ioutil.ReadAll(req.Body)<br />
_ = req.Body.Close()<br />
//将请求体内容重新写入请求体<br />
req.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))<br />
if strings.Index(req.Header.Get("Content-Type"), "json") > -1 {<br />
_ = ParseJson(req)<br />
} else {<br />
_ = req.ParseForm() //格式化请求内容<br />
}<br />
//将请求体内容重新写入请求体<br />
if len(copy) == 0 || copy == false {<br />
req.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))<br />
}<br />
}
欧阳逍遥zhou
发表于 3 天前
<div class="quote"><blockquote><font size="2"><a href="https://hostloc.com/forum.php?mod=redirect&goto=findpost&pid=16044045&ptid=1365358" target="_blank"><font color="#999999">迷茫的tom 发表于 2024-11-19 17:56</font></a></font><br />
他一直只能读一次的原因,很大概率是客户端的问题,客户端不一直发消息,服务端哪里能收到消息噢<br />
但是他 ...</blockquote></div><br />
刚看了 代码截图。。。 我选择闭嘴。<div class="quote"><blockquote><font size="2"><a href="https://hostloc.com/forum.php?mod=redirect&goto=findpost&pid=16044045&ptid=1365358" target="_blank"><font color="#999999">迷茫的tom 发表于 2024-11-19 17:56</font></a></font><br />
他一直只能读一次的原因,很大概率是客户端的问题,客户端不一直发消息,服务端哪里能收到消息噢<br />
但是他 ...</blockquote></div><br />
客户端就是只发一次,本贴的目的是在服务端Read两次,请问你有什么高见?????<br />
<img id="aimg_pgzdJ" onclick="zoom(this, this.src, 0, 0, 0)" class="zoom" src="https://pic.cm/i/2024/11/19/trpzf7.png" onmouseover="img_onmouseoverfunc(this)" onload="thumbImg(this)" border="0" alt="" /><br />
zhou
发表于 3 天前
<div class="quote"><blockquote><font size="2"><a href="https://hostloc.com/forum.php?mod=redirect&goto=findpost&pid=16044058&ptid=1365358" target="_blank"><font color="#999999">loop321 发表于 2024-11-19 17:59</font></a></font><br />
项目中的代码,可以参考一下:</blockquote></div><br />
gin是可以这样的。读完再放回去,但是tcp socket没有这样的写法...<img src="https://hostloc.com/static/image/smiley/yct/016.gif" smilieid="51" border="0" alt="" />
欧阳逍遥
发表于 3 天前
<i class="pstatus"> 本帖最后由 欧阳逍遥 于 2024-11-19 18:10 编辑 </i><br />
<div class="quote"><blockquote><font size="2"><a href="https://hostloc.com/forum.php?mod=redirect&goto=findpost&pid=16044071&ptid=1365358" target="_blank"><font color="#999999">zhou 发表于 2024-11-19 18:01</font></a></font><br />
客户端就是只发一次,本贴的目的是在服务端Read两次,请问你有什么高见?????<br />
<br />
...</blockquote></div><br />
<br />
<img src="https://hostloc.com/static/image/smiley/default/titter.gif" smilieid="9" border="0" alt="" /><br />
<br />
你这写的完全没有逻辑。。。。 首先你客户端是短连接 发完就 断开了。<br />
<br />
你服务端 读取 不用协程处理 conn ??? 你客户端就发了一次。。。 可不就只收到一条。。。<br />
<br />
客户端 Write 外面加 循环 ,才是长连接 循环发送。<br />
<br />
你这就是啥都不会啊。。。。<br />
<br />
或者你这么改就能循环读了。。 但是 读第二条要删掉。。。 因为 永远不可能收到。。。<br />
<br />
conn,_:=ln.accept()<br />
go func(){ //读取用协程读<br />
//读取 逻辑 , 客户端发送 只发送一次 你就只能读一次。。<br />
}
迷茫的tom
发表于 3 天前
<i class="pstatus"> 本帖最后由 迷茫的tom 于 2024-11-19 18:15 编辑 </i><br />
<div class="quote"><blockquote><font size="2"><a href="https://hostloc.com/forum.php?mod=redirect&goto=findpost&pid=16044071&ptid=1365358" target="_blank"><font color="#999999">zhou 发表于 2024-11-19 18:01</font></a></font><br />
客户端就是只发一次,本贴的目的是在服务端Read两次,请问你有什么高见?????<br />
<br />
...</blockquote></div><br />
<br />
没有啥高见,因为流式io和缓冲区设计的时候就不是给你这样用的,不止是net.Conn,基本大部分主流语言对于都是连接流Read完之后就从缓冲区移除<br />
你的数据你都拿完了,后面的你爱存还是怎么样都是你自己的事情,如果你有十分重要的需求,必须要这么做,你可以重写或者重新实现自己的net.Conn包,然后在读取时,再存回去<br />
最后,我没开玩笑,你应该好好审视自己的需求
acm
发表于 3 天前
当你认为GPT连这种基础的技术问题都解决不了的时候应该先问问自己的问题有没有问题
midori
发表于 3 天前
缓冲区被read了之后就释放了呀 ,为什么要read两次,你不能read一次之后自己缓存起来吗