问题:我如何创建一个python应用程序,可以通过互联网连接和发送数据包到运行相同应用程序的另一台计算机?我可以使用现有的代码/库吗?
背景:我对编程很新(HS高级)。我在python中创建了很多简单的东西,但我最近决定开始一个更大的项目。我正在考虑创建一个魔术:聚会助推器选秀模拟器,但我不确定它是否可行,因为我的技能设置所以我在开始之前询问。应用程序需要在计算机之间发送有关正在挑选/传递哪些卡的数据。
谢谢!
答案 0 :(得分:13)
Twisted是一个在MIT下获得许可的python事件驱动的网络引擎。意味着单个机器可以与一个或多个其他机器通信,同时在接收和发送的数据之间执行其他操作,所有这些都是异步的,并且在单个线程/进程中运行。
它支持许多开箱即用的协议,因此您也可以使用现有协议。这是更好的,因为你从第三方软件获得对协议的支持(即使用HTTP进行通信意味着使用HTTP的中间件软件将兼容:代理等)。
如果这是您想要的,也可以轻松创建自己的通信协议。
documentation充满了示例。
答案 1 :(得分:7)
标准库包括SocketServer(记录为here),它可能会做你想要的。
但我想知道更好的解决方案是否可能是使用消息队列。已经存在许多好的实现,包括Python接口。我之前使用过RabbitMQ。这个想法是计算机都订阅队列,并可以发布或监听事件。
答案 2 :(得分:3)
开始寻找的好地方是Python Standard Library。特别是有几个部分是相关的:
既然你提到你没有这方面的经验,我建议从基于HTTP的实现开始。 HTTP协议非常简单易用。此外,还有很好的框架来支持此操作,例如服务器的webpy和客户端的标准库中的HTTPLib。
如果您真的想深入了解网络,那么基于socket的实施可能具有教育意义。这将教会您在 lot 网络代码中使用的基础概念,同时产生类似于文件流的接口。
答案 3 :(得分:1)
通过插座以某种方式进行通信。只是一个问题,你是否使用现有的更高级别的库,或者自己动手。
如果你这样做是为了学习经验,可能想要尽可能低级别地开始,看看真正的细节。这意味着您可能希望以a SocketServer开头,使用TCP连接(TCP基本上保证数据传输; UDP不是)。
Google提供了一些简单的示例代码。设置一个非常容易。但是你必须定义你的通信协议的所有细节:哪一端发送什么时候,什么,哪一端听,什么时候,听众会期待什么,回复确认收据等等。
答案 4 :(得分:1)
另外,请查看Pyro(Python远程处理对象)。 Se this answer了解更多详情。
Pyro基本上允许您将Python对象实例发布为可以远程调用的服务。 Pyro可能是实现Python-to-python进程通信的最简单方法。
答案 5 :(得分:1)
同样值得关注Kamaelia这类事情 - 它的原始用例是网络系统,并使构建此类事物相对直观。 一些链接:Overview of basic TCP system,Simple Chat server,Building a layered protocol,walk-through of how to evolve new components。其他极端:P2P无线电系统:source,peer。
如果它有任何区别,我们已经通过参与谷歌夏季代码连续3年测试系统是否可供新手使用,积极吸引有经验和缺乏经验的开发人员。他们都设法建立了有用的系统。
基本上,如果你曾经玩过unix管道,那么这些想法应该是熟悉的。
警告:我写了很多Kamaelia: - )
如果你想学习如何做这些事情,玩几种不同的方法是有道理的,你一定要看看Twisted(这个问题的标准答案),Pyro&标准库工具。每个人都有不同的方法,学习它们肯定会让你受益!
然而,就像nosklo一样,我建议不要直接使用套接字库而是使用库 - 只是因为让套接字编程比人们想象的要难得多。