我正试图在一个系统上工作,其中服务器将建立一个连接并实时向客户端发送多个数据。Twisted TCP可能在同一连接内发送两个独立的数据?
为了模拟“实时”,我的服务器将发送接连2数据的一个有1秒的延迟
class IphoneChat(Protocol):
def connectionMade(self):
print "a client connected"
self.transport.setTcpNoDelay(True)
msg = 'F#m'
b = msg.encode('utf-8')
msg2 = 'C'
c = msg2.encode('utf-8')
self.transport.write(b)
time.sleep(1)
self.transport.write(c)
我的Android客户端将基本收到的每个数据,并立即打印出来彼此
后while(i<2){
Log.d("waiting", "waiting");
bytesRead = inputStream.read(buffer);
byteArrayOutputStream.write(buffer, 0, bytesRead);
response = byteArrayOutputStream.toString("UTF-8");
i++;
Log.d("response", response);
//immediately run UIthread
runOnUiThread(new Runnable() {
@Override
public void run() {
textResponse.setText(response);
}
});
}
但是,看起来客户端同时采用F#m和C,并将它们一起显示为“F#mC”而不是“F#m”,然后显示为“C”。
是因为TCP无法做我提到的,我不得不使用UDP来做到这一点?
不要使用'time.sleep'在一个Twisted程序中。在Twisted程序中延迟动作的方法是'reactor.callLater'。 – 2014-11-08 13:00:34