package main import ( "fmt" ) type InterfaceConnection interface { DoSomething() int } type MyConnection struct { id int } func (c *MyConnection) DoSomething() int { fmt.Println("Doing something:", c.id) return c.id } func main() { Connections := make(map[uint64]InterfaceConnection) _workerConnections := make(map[uint64]InterfaceConnection) conn := &MyConnection{id: 1} Connections[1] = conn _workerConnections[1] = conn obj, ok := Connections[1] fmt.Printf("%v, %v\n", obj, ok) delete(Connections, 1) obj, ok = Connections[1] fmt.Printf("%v, %v\n", obj, ok) obj, ok = _workerConnections[1] fmt.Printf("%v, %v\n", obj, ok) }
&{1}, true <nil>, false &{1}, true
确实不会影响另一个
map的value是同一个&Struct{}
map的delete只是删除了键和值的对应关系,并不会对值做内存释放操作。
除非没有地方继续引用该值,它才会被垃圾回收。
所以直到fmt.Printf("%p", _workerConnections[1])
执行完成,&MyConnection{id: 1}
才可以被垃圾回收,在此之前它都是有效的。
@1mm0rtal,你选的游戏安装程序是什么格式,是exe吗?
@bigfuji,麒麟990只能使用华为定制的内核,安装第三方内核没有用,就算真的换了应该也启动不了。
@无名啊,可以负载均衡啊,一个直播间对应一个弹幕服务器就行了。
减少弹幕数量和屏蔽的功能都可以在前端实现,字幕轨只是用于提取弹幕内容。
顺便一提直播弹幕,我觉得最有趣的方法是直接把弹幕嵌在视频流的字幕轨里,这样只要前端加个字幕轨提取代码就行了。视频编码器那边,加字幕的工作交给切片服务器就行了,切片是很简单的工作,顺便混合一下字幕不会有什么额外开销。唯一的问题是审核,想删掉嵌入视频的弹幕比较困难
@无名啊,直播间弹幕甚至可以像直播本身一样通过无状态HTTP服务器分发,按时间切片放在不同的json文件里,然后由一个列表(类似m3u8)不断列出最新的json文件名,由播放器自行下载展示。这样就能用分发直播视频流的渠道分发弹幕了。
@无名啊,直播弹幕和群聊的不同点:
- 历史记录:如果对方发消息时你不在线,群聊允许你稍后接收消息,但直播就直接错过了。
- 连接数量:为每个直播间建立一个TCP连接是可接受的,但为每个群建立一个TCP连接似乎不可接受(你可能加入了几百个群)。所以群聊必须由服务器合并你收到的消息,但直播间不需要合并。
- 消息可达性:未收到某个群消息是不可接受的,但未收到某些弹幕完全可以。很多人气很高的直播间弹幕一屏根本放不下,都是裁剪后显示的,每个人都只收到了部分弹幕。
@无名啊,因为每个直播都是一个单独的连接,不需要考虑多个群共享连接,所以采用CDN模型就行了,由一个中心服务器负责发送消息,然后逐级分发给全国CDN,每个人收到的消息都一样。发弹幕则是统一发给那个中心服务器。
@加勒比海带,是,所以QQ群有人数上限,就是为了避免单个群连接数太高服务器撑不住,以及形成广播风暴(每发一个消息就要转发给几千人这种)。限制为几百人是比较合适的。
至于具体的实现,可以采用消息中继模型:
- 我只与负责我登录的服务器联系。群里的其他人各自在他们的服务器,和我可以不在同一个服务器。
- 每个群都有一个专门负责的服务器进行中继。
- 有人发消息时,先发给自己的服务器,然后自己的服务器把消息转发给对应群的中继服务器,中继再查找各个群成员在哪个服务器,并逐一转发。最后群里的所有人都收到了消息。
- 此时设置群成员上限就很有必要,否则每次发消息都相当于给所有服务器都发了一遍,形成广播风暴。
@胡图图,我看贴吧说可以
@㝶芾厶眵攴䭡,还可以开这个:
https://www.alibabacloud.com/help/zh/alibaba-cloud-cdn/latest/set-a-bandwidth-cap
您可以通过配置带宽封顶功能,限制带宽用量的上限,减少因突发流量导致的损失。
不过什么数值合适很难判定,所以我没开。
@㝶芾厶眵攴䭡,我开了频次控制,刷太快会拦截。
@胡椒舰长,虎绿林的非图片附件链接。
如果没有这个,秒传的文件就只能是首次上传时的文件名了。
@王小二,测试一下DNS服务器是否正常:
- 选中梦幻西游。
- 点“启动”旁边的红酒杯图标🍸,选择“Wine CMD”。
- 在CMD里输入命令:
nslookup 163.com
如果报错,说明DNS服务器不对,得修改exagear32的配置文件(具体比较复杂,加微信 https://hu60.cn/q.php/bbs.topic.95988.html )。
我今天试了一下,nslookup命令在wine-3.0中不存在
不过我看到你游戏已经启动了,那游戏可以正常安装更新吧。如果可以安装更新,说明DNS没问题。建议你在允许的情况下用手机热点连接电脑看看能不能登录,如果可以登录,说明你的局域网阻止了游戏服务器连接。
@王小二,我今天试了一下,nslookup命令在wine-3.0中不存在
不过我看到你游戏已经启动了,那游戏可以正常安装更新吧。如果可以安装更新,说明DNS没问题。建议你在允许的情况下用手机热点连接电脑看看能不能登录,如果可以登录,说明你的局域网阻止了游戏服务器连接。
@王小二,测试一下DNS服务器是否正常:
- 选中梦幻西游。
- 点“启动”旁边的红酒杯图标🍸,选择“Wine CMD”。
- 在CMD里输入命令:
nslookup 163.com
如果报错,说明DNS服务器不对,得修改exagear32的配置文件(具体比较复杂,加微信 https://hu60.cn/q.php/bbs.topic.95988.html )。
@兲蛋,?attname=文件名 功能的实现方法