面试时遇到的问题

我查到的资料是根据像素位深度计算内存占用,比如RGBA8888,RGBA4444,一个是32,一个16,再乘以宽高 / 8 / 1024 / 1024,但是jpg位深度是24

image

下面是png的

image

你用TCP也得封装封包拆包,为什么不用现成的?

我记得 cocos png jpg 读到 内存里都是 RGBA8888 吧。
你这是存储格式。

等我后面真机测试,直接用相同图片的png和jpg测试

找到了一个渲染工程师说的
image

你确定WS给你提供封包拆包了就?把官方文档拿出来看看是否有

对于这个问题我不想回答 :sweat_smile:,连续调用send发送字符串,为什么你收到的不是一个连续的字符串,而是多个字符串。这是最基础的问题了吧

如果还不信,这是我之前用 C++ 写的 TCP 模拟 Webscoket 的 IO 代码,你可以自己看看,现在设置为公开了

https://github1s.com/1226085293/public/blob/master/network/websocket/public/source/io_data.cpp

防止你还是不信,附带一篇其他人的文章

https://blog.csdn.net/qianbo042311/article/details/130541129

有专门的网络驱动层管理软件 能让你模拟各种网络环境的
就你说的连续发数据,它可以做到让SOCKET和WS 都能出现是一个连续的数据段
也能让你看到不连续的数据段 和各种前后组合的效果,原因的话 你自己去看协议 而不是靠你的肉眼看

这是MDN的例子,给你找到了,说实话我真的怀疑你连封包拆包都不理解 :rofl:

https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_server#decoding_messages

你还能怎么反驳?门外汉就别评价了

你之前举的是逻辑层连发数据的例子 认为受到的是不连续的结果 就认为对方帮你做了分包处理,
然后你又搜了一个MDN的例子 结果却是一个协议层处理内部数据转换的例子,
我没义务教你的,懂了吧 找个防火墙级的网络数据控制软件 能让你看到你之前一直看不到的效果

你既然都知道是 websocket 协议内部的数据结构了,怎么还用网络测试软件来说明你不懂数据结构怎么用?有什么用呢?

大家来看乐子人了 :rofl:

websocket就是会分包啊,就是协议约定的.
你那啥管理层软件还能让websocket协议传一半数据就响应回调?想什么呢?

2赞

我怎麼感觉这货是想问http 与 web socket 即长短连接差别,只是这货一直是吧http 叫做TCP

分包这个,websocket 是有利用frame 分包的机制,如果底层tcp粘包,在上层的回调也是会根据frame来组装的,所以看上去不用处理分包。
不过谁也说不准浏览器和服务器的实现,是不是会缓存消息,以及有没有最大消息长度限制。所以一般应用层还是会做一下分包处理,以防万一。

其实一般推荐都用websocket的原因不是为了不分包,而是主要还是用wss加密通讯,可以解决被外挂抓包修改的问题。

虽然 websocket 做了分包,但服务器在登录时或其它地方为了性能可能会把多个业务包压缩在一起,一次调用 send 发送的,,

jpg是有损压缩,png是无损的,相同尺寸的png比jpg要大(内存会大点),jpg的编解码速度比png快。
cpu开销会低些。
如果新游戏立项时TCP比websocket更适合呢?你怎么确定?通过游戏类型吧,超大型游戏的话,通信比较频繁的话,选更底层的通信方式吧,一般的大、中、小型游戏,websocket随便乱玩。
js的协程,你用的好,就是协程,用的不好,就是一个异步函数。

TCP, WebSocket, HTTP用途得看游戏类型,一般游戏用哪种方式都 差不多,如果想用更高效的方式 ,那肯定就是套接字了,但是一般的游戏也不在乎这种情况。如果只是发布原生,那套接字接口还是可以导入到JS层的。只是这种东西要看有没有实际意义。HTTP一般情况下更多是作为配置服务器来用的,当然,我也有遇到有人用http开发网络游戏,在状态变更不频繁的情况下,是可以通过http来处理,但是会显的很糟糕且冗余。一般情况下多数是用websocket,所以问这个的真没意义,如果是我面试,我更多会问三者的特性和差异以及使用场景,还有就是一些异常状态下各自的处理方式。真没必要搞太复杂

webstocket和socket 差距不小了,复杂游戏还尽量用socket ,websocket是在基于别人实现的,不同环境下websocket还不小差异行的,比如有的手机在某些操作情况会出现websocket假死的情况,socket就不会出现

jpg是不支持透明通道的 少了一个通道 所以是24 但是好像还有一个说法叫 色深度 我感觉色深和位深在内存占用方面说的是同一个东西

而且在不同系统下显示是不一样的 你那个显示的是所有通道的总位深度 mac上显示的好像是单个通道的位深度 image