0

我想要做的是在每个端口 1025+ 上运行以下脚本。我正在做的是制作一个与此脚本交互的 Blackjack iPhone 应用程序以进行在线游戏。问题是,我想通过更改端口来手动将其放在每个端口上,以便每次监听所有端口。我该怎么做才能在每个端口上都有一个新表。每张牌桌都有一个 ID,应用程序将检查该 ID 以查看牌桌人数和牌桌人数。

套接字为 Table 类设置 ID,但我需要在多个端口上才能保持该表继续运行并保存每个玩家的移动等。

底线,我怎样才能让这个脚本在每个端口上运行,我怎样才能自己改变监听端口,我怎样才能让python在每个端口上自己制作所有的表?

class Table:
    def __init__(self, id):
        self.players = []
        self.positions = {'1': '', '2': '', '3': '', '4': ''}

    def sit(self, player_id, position):
        self.positions[position] = player_id

# --------------------------------------------- #
# --------------------------------------------- #


class Socket(Protocol):
    def connectionMade(self):
        #self.transport.write("""connected""")
        self.factory.clients.append(self)
        print "Clients are ", self.factory.clients

    def connectionLost(self, reason):
        self.factory.clients.remove(self)

    def dataReceived(self, data):
        #print "data is ", data
        a = data.split(':')
        if len(a) > 1:
            command = a[0]
            content = a[1]



            msg = ""

        print msg

        for c in self.factory.clients:
            c.message(msg)

    def message(self, message):
        self.transport.write(message)


factory = Factory()
factory.protocol = Socket
factory.clients = []

reactor.listenTCP(1025, factory)
print "Blackjack server started"
reactor.run()
4

1 回答 1

1

回答你的问题

你问:

  • 如何让这个脚本在每个端口上运行?
  • 如何自行更改监听端口?
  • 如何让 python 在每个端口上自己制作所有表格?

我认为这里的答案是简单地使用循环将工厂绑定到任意数量的端口。但是,由于您也在工厂中存储了客户列表,因此您还需要为到达端口创建一个新工厂。所以像:

factories = [ ]
for i in range(0, NUM_TABLES):
    factory = Factory()
    factory.protocol = Socket()
    factory.clicents = []
    factories.append(factory)
    reactor.listenTCP(1025 + i, factory)
    reactor.run()

您正在使用类,因此每个工厂都有自己的客户端列表,每个工厂都有自己的 Socket 实例来管理连接。您没有展示Table实例是如何实例化的,但只要每个 Socket 或 Factory 实例实例化并维护对 的引用Table,这应该允许您拥有多个连接,每个连接都有自己的状态。

通过保留所有工厂的列表,您可以遍历它们以制作正在运行的游戏列表等。

考虑不同的架构

虽然上述方法可能有效,但这并不是客户端-服务器系统通常的架构方式。特别是,您的系统需要您的客户端知道要使用的端口。当你们都在客厅时,这可能会临时起作用,但这很乏味,而且一般不会扩展。

你想要的是一些东西,比如一个网络服务器,它在一个端口上侦听以建立连接,然后告诉客户端:“嘿,你的表 id 是 25,只要你想说话就用它”。此外,这意味着为客户提供一个表格列表,以便他们可以选择一个。而且,您可以从那里获得更多乐趣:给客户端一个特殊的过期 cookie,这样它就不会意外地破解/干扰不再属于它的游戏等。

于 2012-05-13T06:08:27.877 回答