全球主机交流论坛备用站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

全球云38元起免备案V2EX搬瓦工VPS
SEO查询超级PING网站测速
Virmach特价鸡乌云漏洞吾爱破解
楼主: zhou

【已解决】有没有golang大手子,问题求解

[复制链接]

15

主题

321

回帖

995

积分

高级会员

Rank: 4

积分
995
发表于 3 天前 | 显示全部楼层
20230417
欧阳逍遥 发表于 2024-11-19 17:50
你应该把 服务端 和 客户端代码都贴出来。。。

客户端可以循环读, 但是也要服务端 循环发才行。


他一直只能读一次的原因,很大概率是客户端的问题,客户端不一直发消息,服务端哪里能收到消息噢
但是他自己估计一直在懵逼,因为我推测他连短连接长连接,还有tcp/udp都不清楚,所以你们跟他说什么数据包包头之类他才啥都不知道,甚至连自己在问啥估计都还懵逼着
不过也很正常,谁都是从小白过来的
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

60

主题

331

回帖

1142

积分

金牌会员

Rank: 6Rank: 6

积分
1142
 楼主| 发表于 3 天前 | 显示全部楼层
puper 发表于 2024-11-19 17:52
不可能用一个conn变量做到的

确实瓶颈了,有没有什么曲线救国的方案呢?
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

66

主题

328

回帖

1208

积分

金牌会员

Rank: 6Rank: 6

积分
1208
发表于 3 天前 | 显示全部楼层
zhou 发表于 2024-11-19 17:57
确实瓶颈了,有没有什么曲线救国的方案呢?

从conn读出来, 分发成你需要的个数
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

0

主题

25

回帖

64

积分

注册会员

Rank: 2

积分
64
发表于 3 天前 | 显示全部楼层

项目中的代码,可以参考一下:


// 格式化请求参数
// copy 重新写入reqbody 默认写入
func CopyReqAndFormData(req *http.Request, copy ...bool) {
        //获取请求体内容
        bodyBytes, _ := ioutil.ReadAll(req.Body)
        _ = req.Body.Close()
        //将请求体内容重新写入请求体
        req.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
        if strings.Index(req.Header.Get("Content-Type"), "json") > -1 {
                _ = ParseJson(req)
        } else {
                _ = req.ParseForm() //格式化请求内容
        }
        //将请求体内容重新写入请求体
        if len(copy) == 0 || copy[0] == false {
                req.Body = ioutil.NopCloser(bytes.NewBuffer(bodyBytes))
        }
}
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

0

主题

1

回帖

4

积分

新手上路

Rank: 1

积分
4
发表于 3 天前 | 显示全部楼层
迷茫的tom 发表于 2024-11-19 17:56
他一直只能读一次的原因,很大概率是客户端的问题,客户端不一直发消息,服务端哪里能收到消息噢
但是他 ...

刚看了 代码截图。。。 我选择闭嘴。
迷茫的tom 发表于 2024-11-19 17:56
他一直只能读一次的原因,很大概率是客户端的问题,客户端不一直发消息,服务端哪里能收到消息噢
但是他 ...

客户端就是只发一次,本贴的目的是在服务端Read两次,请问你有什么高见?????

MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

60

主题

331

回帖

1142

积分

金牌会员

Rank: 6Rank: 6

积分
1142
 楼主| 发表于 3 天前 | 显示全部楼层
loop321 发表于 2024-11-19 17:59
项目中的代码,可以参考一下:

gin是可以这样的。读完再放回去,但是tcp socket没有这样的写法...
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

17

主题

764

回帖

1965

积分

金牌会员

Rank: 6Rank: 6

积分
1965
发表于 3 天前 | 显示全部楼层
本帖最后由 欧阳逍遥 于 2024-11-19 18:10 编辑
zhou 发表于 2024-11-19 18:01
客户端就是只发一次,本贴的目的是在服务端Read两次,请问你有什么高见?????

...




你这写的完全没有逻辑。。。。  首先你客户端是短连接 发完就 断开了。

你服务端 读取 不用协程处理 conn ??? 你客户端就发了一次。。。 可不就只收到一条。。。

客户端  Write 外面加 循环 ,才是长连接 循环发送。

你这就是啥都不会啊。。。。

或者你这么改就能循环读了。。 但是 读第二条要删掉。。。 因为 永远不可能收到。。。

conn,_:=ln.accept()
go func(){ //读取用协程读
        //读取 逻辑 , 客户端发送 只发送一次 你就只能读一次。。
}
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

15

主题

321

回帖

995

积分

高级会员

Rank: 4

积分
995
发表于 3 天前 | 显示全部楼层
本帖最后由 迷茫的tom 于 2024-11-19 18:15 编辑
zhou 发表于 2024-11-19 18:01
客户端就是只发一次,本贴的目的是在服务端Read两次,请问你有什么高见?????

...


没有啥高见,因为流式io和缓冲区设计的时候就不是给你这样用的,不止是net.Conn,基本大部分主流语言对于都是连接流Read完之后就从缓冲区移除
你的数据你都拿完了,后面的你爱存还是怎么样都是你自己的事情,如果你有十分重要的需求,必须要这么做,你可以重写或者重新实现自己的net.Conn包,然后在读取时,再存回去
最后,我没开玩笑,你应该好好审视自己的需求
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

12

主题

4093

回帖

9810

积分

论坛元老

Rank: 8Rank: 8

积分
9810
发表于 3 天前 | 显示全部楼层
当你认为GPT连这种基础的技术问题都解决不了的时候应该先问问自己的问题有没有问题
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

25

主题

121

回帖

493

积分

中级会员

Rank: 3Rank: 3

积分
493
发表于 3 天前 | 显示全部楼层
缓冲区被read了之后就释放了呀 ,为什么要read两次,你不能read一次之后自己缓存起来吗
MJJ,你的签名掉了~~~
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

展开

QQ|Archiver|手机版|小黑屋|全球主机交流论坛备用站

GMT+8, 2024-11-22 02:38 , Processed in 0.045181 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表