其他分享
首页 > 其他分享> > 慢网络服务问题

慢网络服务问题

作者:互联网

我在Linux机器(ubuntu)上创建了一个Python网络服务:

import soaplib
import os

from soaplib.core.service import rpc, DefinitionBase, soap
from soaplib.core.model.primitive import String, Integer
from soaplib.core.server import wsgi
from soaplib.core.model.clazz import Array

def runcmd(cmd):
    fout = os.popen(cmd)
    out = fout.read()
    return out

class LinuxServices(DefinitionBase):
@soap(String, String,_returns=Array(String))
def df(self,server, user):
    L = []
    cmd = 'df -hP | grep "/"'
    output = runcmd(cmd).split('\n')
    for n in xrange(len(output)-1):
        out = output[n].split()
        L.append('%s;%s' % (out[5], out[4]))
    return L

if __name__=='__main__':
try:
    from wsgiref.simple_server import make_server
    soap_application = soaplib.core.Application([LinuxServices], 'tns')
    wsgi_application = wsgi.Application(soap_application)
    server = make_server('0.0.0.0', 7789, wsgi_application)
    server.serve_forever()
except ImportError:
    print "Error: example server code requires Python >= 2.5"

我根据以下示例创建了它:soaplib helloworld

然后(在Windows 7上)我创建了一个Silverlight项目,在其中使用以下ws获取Linux服务器上的磁盘状态:

Silverlight项目中的服务:

public class LinuxService
{
    [OperationContract]
    public List<dfItem> df()
    {
        List<dfItem> dfItems = new List<dfItem>();

        WebReference.Application app = new WebReference.Application();

        var result = app.df(new WebReference.df()/*...*/);

        foreach (var item in result.dfResult)
        {
            string[] info = item.Split(';');

            dfItem dfItem = new dfItem()
            {
                MountPoint = info[0].ToString(),
                Usage = info[1].ToString()
            };
            dfItems.Add(dfItem);
        }
        return dfItems;
    }
    //...
}

页面上的呼叫服务:

protected override void OnNavigatedTo(NavigationEventArgs e)
{
    LinuxServiceClient client = new LinuxServiceClient();

    client.dfCompleted += new EventHandler<dfCompletedEventArgs>(client_dfCompleted);

    client.dfAsync();
}

void client_dfCompleted(object sender, dfCompletedEventArgs e)
{
    DG.ItemsSource = e.Result;
    DG.Visibility = System.Windows.Visibility.Visible;
}

我的问题是,当我导航至此页面时,需要花费4-8秒才能从ws(局域网中的ws)获取数据.

我真的怀疑线路带宽会造成这种等待时间…

我的问题:
您对我有什么建议可以加快速度吗?

系统信息:

> UbuntuServer 11.04
> Python:Python 2.7
> Soaplib:soaplib 2.0.0-beta2

> Windows:Windows 7 SP1
> Silverlight:Silverlight 4

解决方法:

我建议使用wireshark http://www.wireshark.org/通过记录(“捕获”)设备可以看到的网络流量副本来“监听”网络上发生的对话.

开始捕获时,数据量似乎不堪重负,但是如果您可以发现任何看起来像SOAP消息的片段(应该很容易发现),则可以通过右键单击并选择来迅速过滤该对话“关注TCP流”.

然后,您可以在弹出窗口中查看编写的SOAP服务与silverlight客户端之间的整个对话.

如果一切正常,请关闭弹出窗口.作为一个额外的好处,wireshark将筛选出片段列表,使其仅包含对话中带有时间戳的片段,以防它们发生.使用它来找出响应缓慢的是客户端还是服务器.

如果似乎没有真正的延迟,那么我建议在要求Silverlight进行SOAP调用与实际进行网络调用之间存在相当大的延迟.

标签:silverlight-4-0,web-services,linux,windows,python
来源: https://codeday.me/bug/20191102/1992351.html