客户端服务器通信网络编程 Python
我计划开发一个有服务器和多个客户端的应用程序。当客户端第一次连接到服务器时,服务器需要给它分配一个ID。每次客户端发送请求时,服务器会给客户端发送一组字符串。客户端处理完这些字符串后,会再次向服务器发送请求,获取另一组字符串。这些字符串存储在服务器的数据库中。
我已经实现了客户端程序的一部分,能够处理这些字符串,但我不知道如何让服务器和客户端之间进行通信。
我正在用Python开发这个应用程序,但我对网络编程不太了解,所以不知道该怎么做才能让它正常工作。
我了解到了一些关于套接字编程、面向消息的中间件、消息队列和消息代理的内容,但不确定这些是否是我需要的。能不能告诉我应该使用什么,以及我需要学习哪些知识才能让这个项目顺利进行?希望我说得不太模糊。
2 个回答
我建议你可以试试 beanstalkd 这个东西。
这样你就可以搭建一个服务器,把一些“字符串”放到一个队列里,然后一个或多个客户端可以从这个队列里取出一个“字符串”,处理完后再取下一个“字符串”。
我觉得用这种方式来处理队列比创建套接字等其他方法要简单。
这只是他们网站上的一个例子。
服务器?
>>> import beanstalkc
>>> beanstalk = beanstalkc.Connection(host='localhost', port=14711)
>>> beanstalk.put('hey!')
1
客户端?
>>> job = beanstalk.reserve()
>>> job.body
'hey!'
>>> job.delete()
使用起来非常简单,可以创建“请求”、“结果”、“错误”这些队列(管道)。
这可能不完全适合你的需求,但值得考虑一下。
我觉得你应该看看XML-RPC协议,它可以让你使用代理对象,而不是直接写那些底层的套接字代码。
Python自带了两个模块来实现这个协议,标准库里的xmlrpclib
是用来做客户端的,而SimpleXMLRPCServer
是用来做服务器的。在Python 3中,它们被重新命名为xmlrpc.client
和xmlrpc.server
。
具体来说,你的服务器会提供一个函数来注册客户端,这个函数会返回一个新的客户端ID,还有一个函数用来处理字符串并返回结果,客户端只需要在代理对象中调用这个方法就可以了。实现起来应该很简单。