在当今,以云优先,移动优先技术为宗旨的时代下,大多数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将通过提高证书来进行相应。

这里是一个代码片段显示如何实现这种情况:
 var socket = new StreamSocket();
Windows.Security.Cryptography.Certificates.Certificate
certificate = await GetClientCert();
socket.Control.ClientCertificate = certificate;
await socket.ConnectAsync(destination,
SocketProtectionLevel.Tls12);
 
JSON在处理null值有了更好的调试体验:
一个关键的开发者要求我们对Windows 8.1中的Windows.Data.Json API针对null提高更好的处理方法。伴随着Windows10,我们已经添加了新的更加直观的API去序列化和反序列化null值与JSON字符串。下面是一个在Windows 10中UWP应用程序如何处理JSON字符串中的null值的示例:
对象序列化为JSON(Stringify):
 jsonObject[key] = JsonValue.CreateNullValue();
var outputString = jsonObject.Stringify();
反序列化JSON字符串(Parse):

 IJsonValue myJsonValue = jsonObject.GetNamedValue(key);

 if (myJsonValue.ValueType == JsonValueType.Null)
{
Phone = null;
}
else
{
var myValue = myJsonValue.GetString();
}

新的枚举类型值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卡上的问题(要下载的数据远远大于应用程序的内存存储)。
 
 
 
与此相关的文章链接:

注:转向原文

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

[转*译]Networking API Improvements in Windows 10的更多相关文章

  1. Windows 10 的音频和 MIDI API将统一

    微软一统 Windows 10 的音频和 MIDI API 微软在夏季NAMM上的A3E大会上做了主题演讲,他们对Windows 10的音频和MIDI API都做了新的规划,开发者针对Windows ...

  2. Windows 10新功能

    Windows 10 中面向开发人员的新增功能 Windows 10 及新增的开发人员工具将提供新通用 Windows 平台支持的工具.功能和体验.在 Windows 10 上安装完工具和 SDK后, ...

  3. [深入浅出Windows 10]不同平台设备的适配

    2.3 不同平台设备的适配 Windows 10通用应用程序针对特定的平台还会有一个子API的集合,当我们要使用到某个平台的特定API的时候(比如手机相机硬件按钮触发事件),这时候就需要调用特定平台的 ...

  4. Windows 10, version 21H1 ARM64

    请访问原文链接:https://sysin.org/article/windows-10-arm/,查看最新版.原创作品,转载请保留出处. Windows 10, version 21H1 (rele ...

  5. Windows 10 16251 添加的 api

    本文主要讲微软最新的sdk添加的功能,暂时还不能下载,到 7月29 ,现在可以下载是 16232 ,支持Neon效果 实际上设置软件最低版本为 16232 就自动支持 Neon 效果. 主要添加了 A ...

  6. 在 Windows 8、Windows 10 桌面模式下的 .NET Framework 程序中,引用 Windows.Runtime 的 API。

    参考:1.https://www.cnblogs.com/webtojs/p/9675956.html 2.http://jennal.com/2016/04/28/using-windows-run ...

  7. Windows 10 开发人员预览版中的新增功能(转自 IT之家)

    Windows 10 开发人员预览版中的新增功能 在Win10预览版中安装工具与SDK后,即可着手创建Windows通用应用或先浏览目前的环境与此前相比都发生了什么变化. 应用建模 文件资源管理器: ...

  8. 背水一战 Windows 10 (120) - 后台任务: 后台上传任务

    [源码下载] 背水一战 Windows 10 (120) - 后台任务: 后台上传任务 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 后台上传任务 示例演示 uwp 的后台上 ...

  9. UWP 推荐 - 限时免费的RSS阅读器《RSS 追踪》登录 Windows 10

    文/云之幻 前不久,博客作者 Bravo Yeung 写了一篇还算略受欢迎的关于 RSS 的文章 .Net开发者必知的技术类RSS订阅指南. RSS 现在用的人很少了,而且就算是我,也不过是在一周前才 ...

随机推荐

  1. 21.ArrayList

    ArrayList是实现List接口的动态数组,所谓动态就是它的大小是可变的.实现了所有可选列表操作,并允许包括 null 在内的所有元素.除了实现 List 接口外,此类还提供一些方法来操作内部用来 ...

  2. utf-8 decode

    摘自 Lua 5.3 源文件 lutf8lib.c /* ** Decode one UTF-8 sequence, returning NULL if byte sequence is invali ...

  3. javascript 内存模型

    我对于 JavaScript 的内存模型一直都比较困惑,很想了解在操作变量的时候,JS 是如何工作的.如果你和我有同样的困惑,希望这篇文章能给你一些启发. 译文,喜欢原文的可以直接拉到底部 当我们声明 ...

  4. Spring boot 配置文件参数映射到配置类属性

    [参考文章]:SpringBoot之@EnableConfigurationProperties分析 [参考文章]:在Spring Boot中使用 @ConfigurationProperties 注 ...

  5. vertical-align  css属性

    vertical-align 属性设置元素的垂直对齐方式. vertical-align 的属性值: baseline:默认.元素放置在父元素的基线上. sub:垂直对齐文本的下标. super:垂直 ...

  6. 【leetcode】20.有效的括号

    题目 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效.有效字符串需满足:左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符串可被认为 ...

  7. 【xsy2332】Randomized Binary Search Tree DP+FFT

    题目大意:给你一个$[0,1]$之间等概率随机序列,你需要把这个序列插入到一棵$treap$中,问这棵$treap$的期望深度,请对于$[1,n]$中的每个深度分别输出它的概率(实数,保留五位小数). ...

  8. Hexo的next主题安装

    通过Git+Hexo搭建的个人博客地址:https://liangh.top/ 1.使用git克隆最新版本 2.先在themes目录创建一个next文件夹,然后在hexo站点目录下右键打开Git Ba ...

  9. Ubuntu下安装程序的三种方法(转)

    引言 在Ubuntu当中,安装应用程序我所知道的有三种方法,分别是apt-get,dpkg安装deb和make install安装源码包三种.下面针对每一种方法各举例来说明. 一.apt-get方法 ...

  10. MLlib之NaiveBayes算法源码学习

    package org.apache.spark.mllib.classification import breeze.linalg.{DenseMatrix => BDM, DenseVect ...