ZeroRPC为进程绑定多端口

时间:2014-04-25 01:43:19

标签: python

我想在服务器上绑定多端口并等待客户端连接。绑定多个端口后。第一个端口没问题,但第二个端口客户端无法连接。以下是我的示例代码。

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()

2 个答案:

答案 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实例进行交互。