【问题标题】:Python tcp socket clientPython tcp 套接字客户端
【发布时间】:2013-10-24 12:13:41
【问题描述】:

我需要一个连接到服务器的 tcp 套接字客户端来发送和接收数据。 但是这个插座必须一直打开,我不能打开另一个插座。

随着时间的推移,我总是有一些数据要发送,然后再处理之前发送的数据的答案。

如果我可以打开许多套接字,我认为这更容易。但就我而言,我必须在同一个套接字上异步发送所有内容。

所以问题是,您建议在 Python 生态系统中使用什么? (扭曲、龙卷风等) 我应该考虑 node.js 还是其他选项?

【问题讨论】:

  • 我不认为让你的套接字保持在线是一个好习惯,你为什么不能在另一个部分中获取数据处理它并再次打开一个套接字?
  • 我会尽力解释。这是服务器的要求。该服务器处理命令并发送回答案。当我打开一个新连接时,我需要用一个 ID 来标识自己(而且我只有一个可用的 ID)。在任何给定时间,我只能有一个具有此 ID 的套接字连接。我试图弄清楚发送大量命令和处理答案的最佳方式是什么。
  • 听起来你正在与之通信的服务器在 TCP 之上定义了一个协议。你能解释一下你正在使用的服务器程序吗?
  • @dequestarmappartialsetattr 我只有那个规范。我无权访问服务器软件。

标签: python node.js sockets tcp twisted


【解决方案1】:

为此我强烈推荐 Twisted:

  • 它为许多 TCP 协议提供了开箱即用的支持。
  • 维护单个连接很容易,ReconnectingClientFactory 可以处理断开连接并使用指数退避,LoopingCall 可以轻松实现心跳。
  • 有状态协议也很容易实现并与复杂的业务逻辑混合。
  • 很有趣。

我有一项服务与您提到的服务完全一样(单次登录、始终保持开启、处理数据)。它已经持续了几个月,像冠军一样工作。

Twisted 可能很难理解,但教程here 是一个很好的开始。从长远来看,了解 Twisted 会让您走得更远!

【讨论】:

  • 有趣。您异步发送和接收数据?您是否使用任何类型的油门发送?
  • @balsagoth:是的。我有一台服务器,用于发送数据/接收结果,并将结果分发给订阅的各种客户端。在处理同时发生的多件事情、路由等(业务逻辑)时,Twisted 尤其出色。我不做任何限制,但有一个ThrottlingFactory 非常容易使用。
  • 伟大的@max。我会尝试。谢谢
【解决方案2】:

“我必须在同一个套接字上异步发送所有内容”

将您的数据添加到队列中,有一个单独的线程将项目从队列中取出并通过socket.send()发送

【讨论】:

    猜你喜欢
    • 2012-03-29
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-02
    • 2010-10-15
    • 2016-10-02
    • 1970-01-01
    相关资源
    最近更新 更多