python应用程序之间的通信

时间:2016-06-22 14:33:09

标签: python multithreading server client

我无法为客户端服务器系统找到一个好的解决方案,客户端向服务器发出请求,服务器会响应结果。服务器需要独立于客户端,即如果我创建一个新的python应用程序,我希望能够轻松连接到服务器并发送请求。我所知道的一个可能的解决方案是使用套接字,但感觉不必要复杂。我尝试过使用经理,但我不确定它是否在正确的轨道上。

我的目标是有这样的工作:

result = server.send("2+2") # result should now be 4

2 个答案:

答案 0 :(得分:0)

结帐ZeroMQ。它可以像超级电源插座一样点对点使用,在您的代码中看起来很干净,就像您的示例一样。 This example显示它有多容易。

或者您可以在服务器端使用轻量级Web服务框架(如BottleFlask来执行简单的REST界面。这些可以首先单独运行以便于使用,然后稍后将它们放在Web服务器(例如nginxuwsgi)之后以获得性能。在客户端使用常规python requests module与它交谈。

答案 1 :(得分:0)

一旦我玩了这些东西(在Python中),这是一个例子(不介意代码风格,格式,效率,因为它们是蹩脚的,编程的PoV中有很多NO-NO,只需看一下它就像它一样是一个起点):

  

server.py:

import sys
import select
from SocketServer import TCPServer, StreamRequestHandler

HOST = "127.0.0.1"
PORT = 12345

class DummyRequestHandler(StreamRequestHandler):
    def handle(self):
        text = ""
        while 1:
            if select.select([self.rfile], [], [], 0.5)[0] == [self.rfile]:
                char = self.rfile.read(1)
                if char == ";":
                    break
                else:
                    text += char

        try:
            result = eval(text)
        except Exception as e:
            result = str(e)
        self.wfile.write(str(result) + ";")

print "Listening on %s:%d" % (HOST, PORT)
server = TCPServer((HOST, PORT), DummyRequestHandler)
server.serve_forever()
  

client.py:

import sys
import socket
import select

HOST = "127.0.0.1"
PORT = 12345
EXIT_TEXT = "EXIT"

text = ""
while not text:
    text = raw_input("Enter text to send (%s to exit) :" % EXIT_TEXT)
    if text.upper() == EXIT_TEXT:
        print "Exiting"
        sys.exit(0)
if text[-1] != ";":
    text += ";"
s4 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s4.connect((HOST, PORT))
s4.send(text)
reply = ""
while 1:
    if select.select([s4], [], [], 0.5)[0] == [s4]:
        char = s4.recv(1)
        if char == ";":
            break
        else:
            reply += char
print "Server replied: %s\n" % reply
s4.close()

我在 Win 上使用 Python2.7.10 测试了它。它适用于简单的表达式。