3

ツイストでサービスを作りました。新しいサーバーに移動するまで、すべてが正常に機能していました。現在、新しいデータを受信すると、サービスはほとんどの接続をドロップします。古いサーバーには 32 ビットの Windows XP がインストールされており、新しいサーバーは Windows Server 2008 64 ビットの Intel サーバー上の VMWare VM です。Python とツイスト バージョンは、両方のサーバーで同じです。

問題の一部を次に示します。

ConnectionLost reason is: Connection to the other side was lost in a non-clean fashion.

Python のバージョンは 2.7.5、Twisted 12.3

これはコード例です:

# -*- coding: utf-8 -*-
from twisted.internet import protocol, reactor
from twisted.python import log

class GreenProtocol(protocol.Protocol):

def __init__(self):
    self.ip = ''
    self.port = 0

def connectionMade(self):
    self.ip = self.transport.getPeer().host
    self.port = self.transport.getPeer().port
    log.msg("[{0}:{1}] NEW CONNECTION".format(self.ip, self.port))  

def dataReceived(self, data):
    log.msg("[{0}:{1}] DATA".format(self.ip,         self.port))                                    

def connectionLost(self, reason):
    log.msg("[{0}:{1}] CONNECTION LOST".format(self.ip, self.port)) 

class GreenFactory(protocol.ServerFactory):
    protocol = GreenProtocol

if __name__ == '__main__':
    factory = GreenFactory()
    reactor.listenTCP(5678, factory)
    log.startLogging(DailyLogFile('log.txt', 'logs'), setStdout=False)
    reactor.run()

接続が確立された後、各クライアントはメッセージを送信します。ただし、5 ~ 10 件のメッセージのうち 1 件のみがログに記録されます。ほとんどのクライアントは、メッセージの送信後に接続を失い、メッセージがサーバーに受信されません。

どうやら、その理由は次のとおりです。

Connection to the other side was lost in a non-clean fashion: read error -- unknown (64)

PS: スニファーで聞くと同じ結果が得られるので、ねじれのせいではないと思います。

PPS: 約 700 のクライアントがあり、そのうち 70 ~ 100 のみがデータを送信でき、他のすべての接続は切断されます。

4

1 に答える 1

1

I found the solution. The problem was that, provider changed tariff plan without any notice. New tariff plan limited the maximum number of connections.

于 2013-09-21T08:18:29.740 に答える