繁体   English   中英

我在扭曲的服务器中使用sendline()怎么办?

[英]What am I doing wrong with sendline() in my twisted server?

我正在尝试一次将文件内容发送到客户端1行,以便客户端(用Objective-C编写)可以分别处理每一行。 但是,客户端的日志显示,从服务器发送过来的数据全部以1行的形式传入,并且显然太大,因此它从一行的中途中断,导致客户端由于意外的语法而崩溃。

我在服务器上做的事情(用python编写,带有扭曲)导致线不单独发送吗?

这是目前阻止我使用的服务器中的特定代码。

def sendLine(self, line): 
    self.transport.write(line + '\r\n') 

def updateShiftList(self):

    #open the datesRequested file for the appropriate store and load the dates into a list
    fob = open('stores/'+self.storeName+'/requests/datesRequested','r')
    DATES_REQUESTED = fob.read()
    datesRequested = DATES_REQUESTED.split('\n')
    #open each date file that is listed in datesRequested
    for date in datesRequested:
        if os.path.isfile('stores/'+self.storeName+'/requests/' + date):
            fob2 = open('stores/'+self.storeName+'/requests/' + date,'r')
            #load the file into memory and split the individual requests up
            THE_REQUESTS = fob2.read()
            thedaysRequests = THE_REQUESTS.split('\n')
            for oneRequest in thedaysRequests:
                if len(oneRequest) > 4:
                    print "*)[*_-b4.New_REQUEST:"+oneRequest
                    self.sendLine('*)[*_-b4.New_REQUEST:'+oneRequest)
            fob2.close()
    fob.close()

非常令人沮丧,我相信这很容易。 谢谢。

这个问题涉及一个经常提出的话题。 关于同一问题,stackoverflow上存在许多问题:

等等

TCP发送有序的,可靠的数据

  • 排序意味着先发送的字节先到达。
  • 可靠性意味着将发送发送的字节,否则连接将断开。 数据不会被静默删除。

流式传输是您最关心的问题。 流不会分成单独的消息。 它由字节组成,这些字节之间的“边界”可以任意移动。

如果您发送“ hello”,然后发送“ world”,则流中这两个字符串之间的边界可能会消失。 对等方可能会收到“ hello,world”或“ h”,“ ello,world”或“ he”,“ ll”,“ o”,“ w”,“ or”或“ ld”。

这就是人们使用面向行协议的原因。 每个逻辑消息末尾的“ \\ r \\ n”允许接收方缓冲并将流拆分成那些原始逻辑消息。

要进行更深入的探讨,我推荐以下有关PyCon演示的视频: http : //pyvideo.org/speaker/417/glyph

所有这些都指向连接的另一端,即ObjC客户端,这是行为不端的根源。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM