【问题标题】:Best Practice: network communication [closed]最佳实践:网络通信 [关闭]
【发布时间】:2008-12-18 11:22:36
【问题描述】:

我正在使用 Python 服务器和 Java 客户端编写一个简单的网络聊天。 但是我想到了一个问题:

我应该使用哪种“网络协议”进行通信? 对我来说有一些可能性:

  • YAML:很好解析,问题:解析的对象包含特定于语言的部分
  • XML:易于解析,简单任务的开销很大
  • 创建自己的“语言”:转义问题,但最灵活

那么最好的做法是什么? 还有其他选择吗?

【问题讨论】:

  • 我们称之为数据格式,而不是协议。协议有 FTP、HTTP 等。
  • @S.Lott:我不同意。数据格式是一种协议。它们将适合表示层的 OSI 模型。尽管术语协议通常暗示数据交换的规则,但在定义数据表示时使用仍然是正确的。

标签: java python networking


【解决方案1】:

检查 JSON。它兼容多种语言(包括 Python 和 Java),并且是人类可读的。 http://www.json.org/

如果您打算进行 Web 开发,并打算使用 Javascript,那么 JSON 可能是一个不错的选择,因为它最初是为 Javascript 设计的。 此外,与 YAML 相比,在 Python 中使用 JSON 就像编写:import json(它是标准库的一部分)一样简单。

您可以查看以下page,比较 XML、JSON 和 YAML。似乎它们在编码延迟和使用的内存方面存在差异,这可能会指导您的选择。

【讨论】:

  • 另外,XML 绝对不容易解析。不像 JSON 或 YAML 那样容易解析。
  • 只是想补充一下,我编写了上面链接的页面,比较了 XML、JSON 和 YAML。好吧,它没有比较它们,而只是引入了比较的需要。我研究了这个主题几个月,进行了太多的测试,并且有很多可爱的数据要分享。从 2009 年 5 月中旬开始,我将发表一系列关于该主题的文章。
【解决方案2】:

对于您的需求,它可能有点重,但是您是否考虑过为您的聊天客户端实现XMPP 协议?

如果您这样做,那么您的系统可以与 Google Talk、Jabber、iChat 等进行互操作。

【讨论】:

    【解决方案3】:

    如果您希望协议也抽象出方法调用,请查看XML-RPC,Java 和 Python(以及几乎所有其他东西)都对它有很好的支持。

    对象编组和解组是可靠的,可以处理 unicode、列表和字典,并产生非常易于人类阅读的输出:

    >>> import xmlrpclib
    >>> print xmlrpclib.dumps((1, u"\xdd\xde"), methodname="my_method")
    <?xml version='1.0'?>
    <methodCall>
    <methodName>my_method</methodName>
    <params>
    <param>
    <value><int>1</int></value>
    </param>
    <param>
    <value><string>ÝÞ</string></value>
    </param>
    </params>
    </methodCall>
    

    基本上,它具有 Mapad 提到的关于 JSON 的好处,具有方法调用的额外功能,但代价是(可能微不足道的)处理成本和(可能微不足道的)编程复杂性。

    Doug Hellman 为 Python XML-RPC 库here 的客户端和服务器部分提供了很好的教程。

    【讨论】:

    • 感谢这个提示,但我不需要函数调用,而是纯数据。我想,这在以后会有用。
    猜你喜欢
    • 2019-02-18
    • 2010-10-08
    • 2021-04-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    • 2013-10-02
    • 2010-10-06
    相关资源
    最近更新 更多