【问题标题】:Python Web Service vs Socket programming Client/Server DesignPython Web Service vs Socket 编程客户端/服务器设计
【发布时间】:2013-08-29 08:24:29
【问题描述】:

我需要一些帮助,我正处于客户端服务器软件的早期设计阶段,我不知道这 2 个选项(Web 服务或 Socket 编程)中哪一个适合我的软件。

所有编程都在 python 中。

布局:

  1. PC 需要运行服务器服务 - 此服务器将从本地计算机获取命令并将它们发送到 MiniPC。

  2. MiniPC 将需要运行客户端服务 - 当它识别命令(方法)时,他将转到硬件(通过串行、usb 连接......),做一些事情并返回 miniPC 并返回结果.

  3. MiniPC 获取硬件结果并将其发送到 Logging 服务器和主 PC

注意事项:

  • PC 可以控制多台 MiniPC。
  • 一个硬件响应中的数据量最高可达 10Kb。
  • 从 PC 到 MiniPC 的命令很小(字符串)
  • 记录数据最大可达 10Kb。

问题:

  1. 您对协议 Web (http) 或 Socket 编程有什么建议?
  2. 您对设计有什么建议吗?

【问题讨论】:

  • 这个问题在programmers.stackexchange.com 上更合适。堆栈溢出是针对编程问题的——这更像是一个设计问题,因此是题外话。

标签: python algorithm web-services sockets client-server


【解决方案1】:

您应该能够为此使用套接字编程。在 PC 上设置套接字服务器,在 MiniPC 设备上设置客户端。客户端将等待来自 PC 的输入(从套接字读取),然后发回他们将从硬件返回的输出。在设计方面,我看到了两件事。首先,套接字服务器可以运行一个 select() 来处理多个客户端。其次,您可能希望将 MiniPC 套接字的 SO_SNDBUF 套接字选项和 PC 上服务器的 SO_RCVBUF 提高到 10Kb 的倍数。您考虑 Web 的理由是什么?

【讨论】:

  • 我认为 Web 更容易开发,所以这就是我想使用它的原因,但从响应中我可以看出,它可能很难在有限的 minipc 上运行
【解决方案2】:

我在 BeagleBone 上使用基于 ARM 的控制器完成了一个类似的项目:请随时通过评论向我提问。

首先,从技术上讲,您的 BeagleBone 是服务器 - 因为它们运行的​​是事件触发的守护程序服务 - 而 PC 是客户端。 (但它只是挂件)

其次,由于嵌入式设备的限制,我无法在服务器上运行高效的 Web 服务器,因此选择很简单。我会建议你坚持使用套接字编程,但添加网络服务,例如 DCHP ,支持 TCP/UDP/UDP 多播,ping,echo,......

最后,性能方面的重要问题如下: 通信的物理层是什么? 以太网?无线上网 ?蓝牙/ZigBee ? I2C/CAN/...?

我猜它是以太网:IEEE 802.11 协议由于 CSMA 的原因不能很好地扩展(参见此处http://fr.wikipedia.org/wiki/CSMA)。如果你想拥有多个设备(几十个),你需要交换机/路由器来封装子网络以避免网络拥塞。

【讨论】:

  • 感谢您的帮助!物理层是以太网。
  • 您有什么建议可以从哪里开始?也许我可以使用一些基本的开源代码并节省开发时间?
  • 这个问题应该被标记并关闭并移至programmers.stackexchange.com。与其回答,不如将人们指向正确的地方
  • 连接到等待它的服务器的服务、守护进程或后台进程仍然是客户端。守护进程并不意味着服务器,即使它一直在运行。
猜你喜欢
  • 1970-01-01
  • 2017-12-10
  • 2014-10-19
  • 1970-01-01
  • 2018-06-24
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多