2010-01-03 75 views
1

我正在使用C並希望知道XML消息是否優於文本消息,只要通過套接字連接進行通信?通過TCP/IP套接字的XML消息

  1. 是否有其他可用的選擇,而不是XML?
  2. 哪個是解析C語言中最好的解析器(或解析選項)?
  3. 是否有任何標準庫隨C一起提供,並有助於解析XML消息?

回答

5
  1. 所以你決定你設計的協議。您可以使用文本或二進制通信。無論使用什麼格式,您都可以決定如何序列化/反序列化和解釋數據。如果您使用XML,則可以利用XMLRPC或SOAP。你也可以使用JSONRPC。上次在我的項目中,我以一種非常簡單而有效的方式使用了二進制文件:第一個標識要調用的方法/函數。接下來的2個字節通知數據的長度(最多64K - 1個字節),其餘的是數據。注意大/小永恆。

  2. 這是非常主觀的。您可以使用驗證或非驗證解析器。 TinyXML是輕量級的。你可以看看MiniXML和Expat。 libxml2更胖。

  3. 到目前爲止XML解析不在C或C++的標準庫中。你可以使用前面提到的庫。

祝你好運!

編輯:

順便說一句,如果你想使用二進制格式來交換數據,只需使用任何這些3:

  1. http://tpl.sourceforge.net/ - Visual C序列化庫。

  2. http://www.s11n.net/c11n/ - 一個強大而複雜的Ç序列化庫。

  3. Siseria - http://sourceforge.net/projects/siseria/,純粹是C.我寫了一個嵌入式系統項目。它運行時沒有任何依賴性,速度非常快!與其他2相比,我非常簡單,根本不使用堆和動態內存。一切都在堆疊中!

2

有任何數量的可能的解決方案。我想,在選擇XML之前,我會看看其他幾個選項。 XML有相當多的開銷;除非你要壓縮你的流,否則它可能有點貴。 XML對於人類來說也不容易編輯,儘管當然比二進制格式更容易編輯。

你可能想看看JSON,這是一個非常流行的格式,是遠遠超過XML簡單。有很多可用的實現。

+0

+1推薦用於Protobuf的JSON – 2010-01-06 13:09:15

1

我強烈推薦Google的數據交換格式Protobuf。我們正在使用它來進行兩個進程之間的通信,這很好。它內置了對C++,Python和Java的支持,以及針對其他一些(Jon Skeet維護C#端口)的第三方庫。

+0

+1。它現在越來越多地被使用了,我知道的是MySQL – 2010-01-06 13:10:02

0

主要問題是您的性能要求是什麼。

如果您打算每秒發送一條消息,請隨意。如果您在一端具有人機界面,請使用XML或任何其他文本格式。

如果你設計一個機器對機器的界面,你應該考慮二進制數據。請記住在這種情況下將所有內容都轉換爲網絡標準字節順序。

+0

的Drizzle分叉是的,我將每秒發送一條消息 – 2010-01-07 05:17:19