Articles of 包

服务器从另一个客户端向客户端请求数据是不好的做法吗?

我正在制作一个协作式白板应用程序,以便在某人正在绘制并使用矩形的情况下,例如,矩形数据包以x, y, width, height, color等参数发送到服务器,然后将数据包发送给其他人在房间里,在他们的屏幕上绘制一个矩形。 到目前为止,所有的命令都可以正常工作,并且每个客户端上还有一个栈,用于无限撤消和重做。 但是,那里的服务器不包含这个堆栈,因为它只需将命令转发给房间中的客户端。 到目前为止,一切正常,每个人都可以看到其他人实时绘图,但我想实现一个function,如果某人迟到,他们可以看到当前的白板。 也就是说,整个命令堆栈都必须发送给某人。 但是,这些数据不存储在服务器上,但每个客户端都有自己的(相同的副本)。 如果有人join让服务器询问其中一个客户端(哪个?循环?)将其命令堆栈发送到服务器,并让服务器将其转发给客户端,那么这样做会不好吗? 我担心的是一次性发送的数据量(拥塞)。 你们都在想什么? 还有其他的select吗?

我怎样才能逃离我的游戏的分组数据的字段分隔符?

对于我的游戏,我决定不encryption我的数据包的有效载荷。 相反,我只是要检查服务器上的一切,以确保数据包是合法的。 由于我没有做任何encryption,我的数据包的原始有效载荷如下所示: PacketID|Arg1|Arg2|Arg3[|Arg4…] 现在我想编码这些参数,所以如果我有一个| 在例如聊天消息中,我仍然可以处理我的数据包。 我怎样才能做到这一点?

将每个收到的数据包作为结构体?

在MMORPG游戏中,处理从套接字接收的数据的最佳性能解决scheme是什么? 有这样的事情是不错的: [StructLayout(LayoutKind.Explicit, Pack = 1)] public struct LoginPacket { [FieldOffset(0)] public int size; [FieldOffset(4)] public int opcode; [FieldOffset(32)] public int someOtherImportantOffsetInPacket; } 然后当接收到每个数据包时,为接收到的数据包创建正确的结构,以便更容易地访问它的信息? 或者,如果我只是将byte[]传递给函数并使用像BitConverter.ToInt32这样的函数,那么性能最好的解决scheme是? 我知道BitConverter很慢,但我已经有了自己的类,以更快的速度做同样的事情。

数据包处理系统架构?

我正在开发一个多人Flash游戏(ActionScript 3),并附带一个用Python编写的服务器,我想了解一些关于networking的技巧,特别是在客户端和服务器上处理数据包和实现这样一个系统 。 此时,我使用字节来标识数据包(例如,0x00是login请求,0x02是login响应),按照我的协议指定的顺序发送和读取数据。 这很好,我也可以,但是我想清理处理这个系统的代码,因为它看起来多余且不直观。 我要求有经验的networking程序员,特别是游戏开发人员回答这个问题,因为我缺乏这方面的经验。 现在,数据包系统由两个主要组件组成 : Networker和PacketParser 。 Networker的工作是确定数据包何时开始,然后将数据包传递给PacketParser , PacketParser将读取由标识字节确定的数据包内容,并返回一个由Networker处理的数据的关联数组例如,一个实体的位置被更新。 发送数据包时,用户会向Networker发送一个关联的数据数组,然后通过PacketParser发送给套接字,这个代码相当丑陋而荒谬。 以下是Python中的一个示例,packetparser.py: def sendPacket(data, socket): byters = "" # Buffer – will be sent at once if data["Type"] == "LoginReply": byters = unpacker.sendUnsignedByte(byters, 1) byters = unpacker.sendString(byters, data["Message"]) if data["Type"] == "Message": byters = unpacker.sendUnsignedByte(byters, 2) byters = unpacker.sendString(byters, data["Message"]) if data["Type"] […]

对于基于reflection的序列化来说,保持一致的字段顺序是否很重要?

我刚写完一个数据包生成器,将数据dynamic加载到数据stream中,以便最终进行networking传输。 每个构建器通过查找给定类(及其超类)中标记有@data注释的字段来操作。 当我完成我的实现时,我记得getFields() 不会以任何特定的顺序返回结果 。 序列化任意数据(如我的数据包)的基于reflection的方法是否试图保留特定的字段顺序(如按字母顺序排列),如果是这样的话,怎么办?

数据包延迟是否会波动?

数据包从客户端传输到服务器的时间是否会波动?