我想在服务器上绑定多端口并等待客户端连接。绑定多个端口后。第一个端口没问题,但第二个端口客户端无法连接。以下是我的示例代码。
class HelloRPC(object):
def hello(self, name):
print "this is server"
return "Hello"
s = zerorpc.Server(HelloRPC())
s.bind("tcp://0.0.0.0:4242")
s1 = zerorpc.Server(HelloRPC())
s1.bind("tcp://0.0.0.0:5000")
s.run()
s1.run()
答案 0 :(得分:0)
对s.run()的调用阻止,导致无法访问s1.run()。
解决此问题的一种方法是使用gevent生成多个greenlet来运行服务器:
import zerorpc
import gevent
class HelloRPC(object):
def hello(self, name):
print "this is server"
return "Hello"
s = zerorpc.Server(HelloRPC())
s.bind("tcp://127.0.0.1:5001")
s1 = zerorpc.Server(HelloRPC())
s1.bind("tcp://127.0.0.1:5002")
gevent.joinall([gevent.spawn(s.run), gevent.spawn(s1.run)])
有了这个,你可以运行:
> zerorpc tcp://127.0.0.1:5002 hello world
connecting to "tcp://127.0.0.1:5002"
'Hello'
> zerorpc tcp://127.0.0.1:5001 hello world
connecting to "tcp://127.0.0.1:5001"
'Hello'
有关如何运行多个服务器的更多示例,请查看ZeroRPC tests。
答案 1 :(得分:-1)
您还可以创建一个服务器实例并将其绑定到多个端口,如下所示:
class HelloRPC(object):
def hello(self, name):
print "this is server"
return "Hello"
s = zerorpc.Server(HelloRPC())
s.bind("tcp://0.0.0.0:4242")
s.bind("tcp://0.0.0.0:5000")
s.run()
请注意,这与您提供的示例不同。在您的示例中,连接到不同端口的两个客户端将与HelloRPC类的不同实例进行交互,在我的示例中,它们将与同一个HelloRPC实例进行交互。