Loading

[转*译]Networking API Improvements in Windows 10

    在当今,以云优先,移动优先技术为宗旨的时代下,大多数Apps都至少有一些与web服务或网络上其他设备的集成。这些包括应用程序,它获取天气在线内容,新闻或体育比赛的分数,媒体或下载的播客,甚至对等网络游戏、聊天或VoIP应用。这些应用程序通过使用各种各样的网络API来共同构建通用应用程序平台。
     在windows 10中,我们的网络团队投入了大量努力改善开发人员在使用这些网络API时在功能和灵活性方面的运行速度和内存性能。在这篇博客文章,我们将讨论一些关键我们在这方面取得改进,并向你说明该如何在您自己的应用程序中利用这些新的特性。
 
通用应用程序平台下的网络API:
通用Windows平台(UWP)包含一组大型的网络api,主要是针对不同的方案,包括从查询设备的连接状态和连接到对等设备,与REST的web服务通信并在后台下载大型媒体文件。在这篇博客文章,我们将重点放在以下的网络api的子集:
  1. Windows.Networking.Sockets – 通常用在P2P聊天、VoIP、VPN应用程序
  2. System.Net.Sockets – .NET版本的网络套接字API,主要用于跨平台的库和应用程序
  3. WinSock –  广泛用于跨平台的库,如OpenSSL或者多人游戏库
  4. Windows.Web.Http and System.Net.Http – 用于与REST web服务进行通信
  5. Windows.Networking.BackgroundTransfer – 用于上载或下载数据,即使应用程序没有在前台
  6. Windows.Data.Json – 用于序列化/反序列化JSON内容由web服务提供服务
这些API在最底层着代表不同的网络套接字层,HTTP构建在它之上。最后,后台传输和JSON,它为构建在HTTP之上添加了更多的价值。
 
网络API在Windows10中的新特性:
在windows 10中,上述的API已经加强了更高的性能,为开发人员提供了更大的灵活性。我们在BUILD 2015视频中详细讨论所有这些改进为。
  1. Socket Broker:允许应用程序侦听套接字,即使是当应用程序在后台运行的情况下;
  2. Batched Sends:在套接字API实现的一种新的优化,可以以高达4x的速度发送数据;
  3. HTTP/2:新版的HTTP API支持新的,更快UWP应用程序的HTTP协议的版本。这使得REST web服务下载和上传高达3x的速度;
  4. Post-processing in Background Transfer:UWP应用程序现在可以处理后台任务中的下载/上传,即使是在应用程序下次启动。

 

由于时间限制,我们不能涵盖所有新功能的视频中,我们添加到windows 10。这里还有更多:
 
System.Net.Sockets 和 Winsock for UWP Apps:
针对UWP应用程序开发者来说,Windows10、System.Net.Sockets和Winsock已经添加到API中,在Windows应用商店中的应用程序(它们也同样适用于Windows Phone Silverlight apps),这些API使用频率是很高的。在Visual Studio2014中WinSock也同样支持Windows8.1。
在当前UWP中的Winsock和System.Net.Sockets是基于Phone 8.1 Silverlight,并且继续支持大多数的类型,属性和方法(一些被认为过时的API已经被移除了。)。
 
客户端证书支持流式套接字类:
Windows.Networking.StreamSocket类支持通过使用using SSL/TLS进行服务器与应用程序将的认证交互。在某种情况下,这个应用程序还需要通过使用TLS客户端证书向服务器验证自身。 在Windows10开始时,你可以在流式套接字中提供一个客户端证书,控制对象(它必须在TLS进行握手协议之前启动)。如果服务器端请求了一个客户端的证书,Windows将通过提高证书来进行相应。
这里是一个代码片段显示如何实现这种情况:
1 var socket = new StreamSocket();
2 Windows.Security.Cryptography.Certificates.Certificate
3 certificate = await GetClientCert();
4 socket.Control.ClientCertificate = certificate;
5 await socket.ConnectAsync(destination,
6 SocketProtectionLevel.Tls12);
 
JSON在处理null值有了更好的调试体验:
一个关键的开发者要求我们对Windows 8.1中的Windows.Data.Json API针对null提高更好的处理方法。伴随着Windows10,我们已经添加了新的更加直观的API去序列化和反序列化null值与JSON字符串。下面是一个在Windows 10中UWP应用程序如何处理JSON字符串中的null值的示例:
对象序列化为JSON(Stringify):
1 jsonObject[key] = JsonValue.CreateNullValue();
2 var outputString = jsonObject.Stringify();
反序列化JSON字符串(Parse): 
 1 IJsonValue myJsonValue = jsonObject.GetNamedValue(key);
 2  
 3 if (myJsonValue.ValueType == JsonValueType.Null)
 4 {
 5 Phone = null;
 6 }
 7 else
 8 {
 9 var myValue = myJsonValue.GetString();
10 }

新的枚举类型值JsonValueType.Null 允许开发者通过以同样的编程方式使用整型、字符串和布尔类型的值来处理null。

JSON在Visual Studio中丰富的调试体验:
接下来我们需要介绍的是 Windows.Data.Json 在Visual Studio中丰富的调试体验。在Windows8.1中,开发者通过逐句调试只能看到一个JsonObject或JsonArray实例的类型,而不是它的全部内容。这使得开发人员更难调试分析逻辑,并确保其是否被正确填充。伴随着Windows10,你现在可以检查内部的JsonObject和JsonArray类型的内容。下面是一个示例与JsonArray对象:
 
改进的SD卡支持后台传输:
在Windows8.1中,Windows.Networking.BackgroundTransfer API支持将数据下载到可移动存储设备中(如SD卡),实际上是将数据下载为内部临时缓存,然后再将数据移到指定的位置,这样导致的后果是可以下载的文件的大小限制了可用的内存量。
在Windows10中,
旧有的实现方式被改为检查下载是发生在不同的驱动器而不是在安装程序中,并将使用该临时缓存的位置。这将解决不能下载大文件在SD卡上的问题(要下载的数据远远大于应用程序的内存存储)。
 
 
 
与此相关的文章链接:

注:转向原文

    由于部分翻译并没有完全按照原文翻译的,所有可能与原文有所不同,还请各位博友批评和指正!!

posted @ 2015-07-12 15:53  hippieZhou  阅读(777)  评论(0编辑  收藏  举报