UFO ET IT

protobuf-csharp-port와 protobuf-net 중에서 선택하는 방법

ufoet 2020. 11. 21. 08:37
반응형

protobuf-csharp-port와 protobuf-net 중에서 선택하는 방법


저는 최근에 원래 Google에서 개발 한 Protocol Buffers 라이브러리의 C # 포팅을 찾아야했습니다. 그리고 여기에서 아주 잘 알려진 두 사람이 소유 한 두 개의 프로젝트를 찾았습니다. Jon Skeet이 작성한 protobuf-csharp-portMarc Gravell이 작성한 protobuf-net 입니다. 제 질문은 간단합니다. 어떤 것을 선택해야합니까?

C # 철학에 더 가까운 것처럼 보이며 (예를 들어, 기존 클래스의 속성에 속성을 추가 할 수 있음), System.Guid와 같은 .NET 기본 제공 유형을 지원할 수있는 것처럼 보이므로 Marc의 솔루션을 아주 좋아합니다.

둘 다 정말 훌륭한 프로젝트라고 확신하지만 당신의 의견은 무엇입니까?


나는 Jon의 요점에 동의합니다. 여러 환경에서 코딩하는 경우 그의 버전은 다른 "핵심"구현과 유사한 API를 제공합니다. protobuf-net은 대부분의 .NET serializer가 구현되는 방식과 훨씬 더 유사하므로 .NET 개발자에게 더 친숙합니다 (IMO). Jon이 언급했듯이 원시 바이너리 출력 동일해야 나중에 필요할 경우 다른 API로 다시 구현할 수 있습니다.

이 구현 관련된 protobuf-net에 대한 몇 가지 사항은 다음과 같습니다.

  • 기존 유형 과 함께 작동 합니다 (.proto에서 생성 된 유형뿐만 아니라)
  • WCF 및 memcached와 같은 작업에서 작동합니다.
  • ISerializable기존 유형 을 구현 하는 데 사용할 수 있습니다.
  • 상속 * 및 직렬화 콜백 메서드 지원
  • 다음과 같은 일반적인 패턴을 지원합니다. ShouldSerialize[name]
  • 기존 데코 레이팅 된 유형 ( XmlType/ XmlElement또는 DataContract/ DataMember) 과 함께 작동 합니다. 예를 들어 LINQ-to-SQL 모델이 즉시 직렬화 (DBML에서 직렬화가 활성화 된 경우) 함을 의미합니다.
  • v2에서는 속성이없는 POCO 유형에 대해 작동합니다.
  • v2에서는 .NET 1.1 (대량 판매 기능인지 확실하지 않음) 및 대부분의 다른 프레임 워크 (monotouch 포함-예!)에서 작동합니다.
  • 가능 (아직 구현) V2는 전체 그래프를 지원할 수 있습니다 * 직렬화 (단지 트리 직렬화)

(* =이 기능은 100 % 유효한 protobuf 바이너리를 사용하지만 다른 언어에서는 사용하기 어려울 수 있습니다)


프로젝트에서 다른 언어도 사용하고 있습니까? 그렇다면 내 C # 포트를 사용하면 모든 플랫폼에서 유사한 코드를 작성할 수 있습니다. 그렇지 않다면 Marc의 포트는 아마도 시작하기에 더 관용적 인 C # 일 것입니다. (저는 내 코드를 일반 C #처럼 "느낌"으로 만들려고 노력했지만 디자인은 Java 코드를 기반으로 시작하여 의도적으로 Java를 사용하는 사람들에게도 친숙합니다.)

물론 이것의 장점 중 하나는 나중에 마음을 바꿀 수 있고 다른 프로젝트를 통해 모든 데이터가 여전히 유효하다는 확신을 가질 수 있다는 것입니다. 내가 한 경우에는 절대적으로 바이너리 호환이 가능해야합니다 (직렬화 된 데이터 측면에서). 알고 있습니다.


GitHub 프로젝트 사이트 에 따르면 protobuf-csharp-port 는 이제 주요 Google Protocol Buffers 프로젝트로 접혔 으므로 protobuf 3의 공식 .NET 구현이 될 것입니다. protobuf-net 은 2013 년마지막으로 업데이트 되었습니다. 최근 GitHub에서 일부 커밋이 발생했습니다 .


다음과 같은 이유로 protobuf-csharp-port에서 protobuf-net으로 전환했습니다.

  • protobuf-net은 ".net과 비슷"합니다. 즉, 코드 생성 대신 멤버를 직렬화하는 설명자입니다.
  • protobuf-csharp-port .proto 파일을 컴파일하려면 2 단계 프로세스를 수행해야합니다. 즉, protoc를 사용하여 .protobin으로 컴파일 한 다음 protoGen으로 컴파일해야합니다. protobuf-net은이 작업을 한 단계로 수행합니다.

필자의 경우 프로토콜 버퍼를 사용하여 .net 클라이언트와 j2ee 백엔드 간의 xml 기반 통신 모델을 대체하고 싶습니다. 이미 코드 생성을 사용하고 있으므로 Jon의 구현으로 이동합니다.

Java interop이 필요하지 않은 프로젝트의 경우 특히 v2가 주석없이 작업 할 수 있기 때문에 Marc의 구현을 선택합니다.

참고 URL : https://stackoverflow.com/questions/2522376/how-to-choose-between-protobuf-csharp-port-and-protobuf-net

반응형