我在一个简单的扭曲服务器实现中接收长数据(> 1024 字节)时遇到问题。从一开始,我正在开发一个必须与扭曲服务器同步的 ios 应用程序。我准备要以 JSON 格式发送的信息。然后我开始以块的形式发送该数据(现在以块的形式发送256bytes + 4 bytes
命令 - 是的,我正在实现自己的协议)。连接正常,我在我的服务器中收到了这些数据包(在dataReceived
我自己的协议子类的函数中)。ios 方法:NSInteger writtenBytes =[self.outputStream write:[data bytes] maxLength:[data length]]
将写入的字节返回到流中。对于前 4 个数据包,返回的值是预期的(260 字节)。如果我有更多可用字节要发送,下次我调用该方法时它会返回 0(苹果文档说:)"If the receiver is a fixed-length stream and has reached its capacity, 0 is returned."
。
所以我推断输入缓冲区已满。我不知道如何释放该缓冲区(我不知道如何到达该缓冲区)。我不知道那个缓冲区的极限在哪里(在我看来这几乎是荒谬的)。
这是服务器的基本测试(只是这个问题的重要内容,基于字符串协议的基本)
from twisted.internet.protocol import Protocol, Factory
from twisted.internet import reactor
class IphoneSync(Protocol):
def __init__(self):
self.__buffer = ""
def connectionMade(self):
self.transport.write("0:")
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 = ""
if command == "iam":
#user&Pass checking
msg = "1"
elif command == "msg":
self.__buffer += data
msg = "1: continue"
elif command == "fin":
#procesaremos todo
#Convertir datos en json
#insertar/actualizar data en sqlite
#devolver respuesta
print "buffer is", self.__buffer
msg = "2: procesing"
print msg
self.transport.write(msg)
#for c in self.factory.clients:
#c.message(msg)
def message(self, message):
self.transport.write(message)
#self.transport.write(message + '\n')
factory = Factory()
factory.protocol = IphoneSync
factory.clients = []
dir(factory)
reactor.listenTCP(8000, factory)
print "Iphone Chat server started"
reactor.run()
我看到了LineReceiver
课程,但我没有发送线路。传输的数据可能非常大(10Mb-50Mb)。我正在考虑消费者/生产者模型,或像(AMP 或 PB)这样的 RPC 协议作为解决方案,但我想使用我自己的协议。如果有人知道如何帮助我,我将不胜感激。不管怎么说,还是要谢谢你。