2014-08-27 157 views
-1

我是套接字新手,我有一些关于客户端< - >服务器通信的理论问题。套接字和数据传输格式

问题是关于消息类型和格式。

  1. 如果我将用一个字符串作为字节[]与定界符的消息,对于所有客户端 - 服务器操作,是它的高负荷项目的一个很好的做法? 例如: “CMSG_AUTH:登录名:密码”

  2. 我听说有人使用opcodes作为服务器返回命令。我应该串联使用字符串和操作码吗?如何?对于内部服务器体系结构,哪些设计模式会很好学习? (我知道,这是一个愚蠢的问题,但我真的很感兴趣的服务器开发,这是我的梦想编写良好的,可扩展的服务器应用程序)。我不想使用WCF,我想从头开始,只是为了理解它是如何工作的。

+1

你在想TCP或UDP吗?一个常见的初学者错误是没有意识到,TCP套接字只是提供了“字节流”的抽象 - 如果你想要*消息*,这取决于你在TCP抽象之上实现它们。 – 2014-08-27 12:40:03

+0

我的意思是TCP :) – Jesse 2014-08-27 12:52:13

+1

是的,好吧。所以如果你想要消息,你必须实现它们。对“Receive”的调用可能会收到消息的*部分*。或者一个消息的结尾,另一个完整的消息和第三个消息的开始。或者你可以想到的任何其他组合。 – 2014-08-27 12:57:37

回答

0

使用已建立的格式序列化来自客户端和服务器的消息。对方可以使用相同的格式进行反序列化。

格式示例是JSON,xml(使用字符串)或protobuf(二进制)。

定义要客户端和服务器之间传输的信息类:

class LoginDto 
    { 
     string UserName {get;set;} 
     string Secret{get;set;} 
    } 

如果你坚持既定的格式,它是很容易的序列化这样一个类的实例在被传输线。

寻找DataContractSerializer,JSON.NetProtobuf-net来实现XML,JSON和protobuf序列化器。