当前位置: 首页 > news >正文

微信公众号官网登录入口手机版谷歌seo是什么职业

微信公众号官网登录入口手机版,谷歌seo是什么职业,温州快建网站建设,网站备案号信息查询大多数人已经从谷歌那里听说过SPDY#xff0c;该协议被提议作为老化的HTTP协议的替代品。 Web服务器是浏览器正在缓慢地实现该协议#xff0c;并且支持正在增长。 在最近的文章中#xff0c;我已经写过SPDY的工作方式以及如何在Jetty中启用SPDY支持。 由于Netty#xff08;… 大多数人已经从谷歌那里听说过SPDY该协议被提议作为老化的HTTP协议的替代品。 Web服务器是浏览器正在缓慢地实现该协议并且支持正在增长。 在最近的文章中我已经写过SPDY的工作方式以及如何在Jetty中启用SPDY支持。 由于Netty最初来自JBoss几个月以来也支持SPDY 。由于Netty通常用于高性能协议服务器因此SPDY是合乎逻辑的。 在本文中我将向您展示如何创建一个基于Netty的基本服务器该服务器在SPDY和HTTP之间进行协议协商。 它使用Netty snoop示例中的示例HTTPRequestHandler来消耗并产生一些HTTP内容。 为了使一切正常我们需要做以下事情 在Java中启用NPN以确定要使用的协议。 根据协商的协议确定使用HTTP还是SPDY。 确保使用HTTP发送回正确的SPDY标头。 SPDY使用TLS扩展来确定要在通信中使用的协议。 这称为NPN。 我写了一个更完整的说明并显示了文章中有关如何在Jetty上使用SPDY的消息因此有关该文章的更多信息请参见。 基本上此扩展的作用是在TLS交换期间服务器和客户端也会交换它们支持的传输级别协议。 对于SPDY服务器可以同时支持SPDY协议和HTTP协议。 然后客户端实现可以确定要使用的协议。 由于这不是标准Java实现中可用的功能因此我们需要使用NPN扩展Java TLS功能。 在Java中启用NPN支持 到目前为止我发现了两个可以用来在Java中添加NPN支持的选项。 其中一个来自https://github.com/benmmurphy/ssl_npn 他的回购中也有一个基本的SPDY / Netty示例他使用自己的实现。 我将要使用的另一个选项是Jetty提供的NPN支持。 Jetty提供了一个易于使用的API可用于将NPN支持添加到Java SSL上下文中。 再次在关于码头的文章中您可以找到关于此的更多信息。 要为Netty设置NPN我们需要执行以下操作 将NPN lib添加到引导路径 将SSL上下文连接到NPN Api 将NPN库添加到boothpath 首先是第一件事。 从http://repo2.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/8.1.2.v2012下载NPN引导jar并确保在运行服务器时像这样启动它 java -Xbootclasspath/p:path_to_npn_boot_jar 通过这段代码Java SSL支持NPN。 但是我们仍然需要访问此协商的结果。 我们需要知道我们使用的是HTTP还是SPDY因为这决定了我们如何处理接收到的数据。 为此Jetty提供了一个API。 为此和所需的Netty库我们将以下依赖项添加到pom中因为我使用的是maven。 dependencygroupIdio.netty/groupIdartifactIdnetty/artifactIdversion3.4.1.Final/version/dependencydependencygroupIdorg.eclipse.jetty.npn/groupIdartifactIdnpn-api/artifactIdversion8.1.2.v20120308/version/dependency 将SSL上下文连接到NPN API 现在我们已启用NPN并将正确的API添加到项目中我们可以配置Netty SSL处理程序。 在Netty中配置处理程序是在PipelineFactory中完成的。 对于我们的服务器我创建了以下PipelineFactory package smartjava.netty.spdy; import static org.jboss.netty.channel.Channels.pipeline;import java.io.FileInputStream; import java.security.KeyStore;import javax.net.ssl.KeyManagerFactory; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLEngine;import org.eclipse.jetty.npn.NextProtoNego; import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.channel.ChannelPipelineFactory; import org.jboss.netty.handler.ssl.SslHandler;public class SPDYPipelineFactory implements ChannelPipelineFactory {private SSLContext context;public SPDYPipelineFactory() {try {KeyStore keystore KeyStore.getInstance(JKS);keystore.load(new FileInputStream(src/main/resources/server.jks),secret.toCharArray());KeyManagerFactory kmf KeyManagerFactory.getInstance(SunX509);kmf.init(keystore, secret.toCharArray());context SSLContext.getInstance(TLS);context.init(kmf.getKeyManagers(), null, null);} catch (Exception e) {e.printStackTrace();}}public ChannelPipeline getPipeline() throws Exception {// Create a default pipeline implementation.ChannelPipeline pipeline pipeline();// Uncomment the following line if you want HTTPSSSLEngine engine context.createSSLEngine();engine.setUseClientMode(false);NextProtoNego.put(engine, new SimpleServerProvider());NextProtoNego.debug true;pipeline.addLast(ssl, new SslHandler(engine));pipeline.addLast(pipeLineSelector, new HttpOrSpdyHandler());return pipeline;} } 在此类的构造函数中我们设置了基本的SSL上下文。 我们使用的密钥库和密钥是我使用java keytool创建的这是常规的SSL配置。 收到请求后将调用getPipeline操作来确定如何处理该请求。 在这里我们使用Jetty-NPN-API提供的NextProtoNego类将SSL连接连接到NPN实现。 在此操作中我们传递一个提供程序该提供程序用作服务器的回调和配置。 我们还将NextProtoNego.debug设置为true。 这会打印出一些调试信息从而使调试更加容易。 SimpleServerProvider的代码非常简单 public class SimpleServerProvider implements ServerProvider {private String selectedProtocol null;public void unsupported() {//if unsupported, default to http/1.1selectedProtocol http/1.1;}public ListString protocols() {return Arrays.asList(spdy/2,http/1.1);}public void protocolSelected(String protocol) {selectedProtocol protocol;}public String getSelectedProtocol() { return selectedProtocol;} } 此代码几乎是不言自明的。 当客户端不支持NPN时将调用不受支持的操作。 在这种情况下我们默认为HTTP。 protocol操作返回服务器支持的协议 服务器和客户端协商协议后将调用protocolSelected操作 getSelectedProtocol是一种用于从Netty管道中的其他处理程序获取所选协议的方法。 根据协商的协议确定使用HTTP还是SPDY 现在我们需要配置Netty使其为HTTPS请求和SPDY请求运行特定的管道。 为此让我们回顾一下管道工厂的一小部分。 pipeline.addLast(ssl, new SslHandler(engine)); pipeline.addLast(pipeLineSelector, new HttpOrSpdyHandler()); 该管道的第一部分是配置了NPN支持的SslHandler。 下一个将被调用的处理程序是HttpOrSpdyHandler。 该处理程序根据协议确定要使用的管道。 接下来列出此处理程序的代码 public class HttpOrSpdyHandler implements ChannelUpstreamHandler {public void handleUpstream(ChannelHandlerContext ctx, ChannelEvent e)throws Exception {// determine protocol typeSslHandler handler ctx.getPipeline().get(SslHandler.class);SimpleServerProvider provider (SimpleServerProvider) NextProtoNego.get(handler.getEngine());if (spdy/2.equals(provider.getSelectedProtocol())) {ChannelPipeline pipeline ctx.getPipeline();pipeline.addLast(decoder, new SpdyFrameDecoder());pipeline.addLast(spdy_encoder, new SpdyFrameEncoder());pipeline.addLast(spdy_session_handler, new SpdySessionHandler(true));pipeline.addLast(spdy_http_encoder, new SpdyHttpEncoder());// Max size of SPDY messages set to 1MBpipeline.addLast(spdy_http_decoder, new SpdyHttpDecoder(1024*1024)); pipeline.addLast(handler, new HttpRequestHandler());// remove this handler, and process the requests as spdypipeline.remove(this);ctx.sendUpstream(e);} else if (http/1.1.equals(provider.getSelectedProtocol())) {ChannelPipeline pipeline ctx.getPipeline();pipeline.addLast(decoder, new HttpRequestDecoder());pipeline.addLast(http_encoder, new HttpResponseEncoder());pipeline.addLast(handler, new HttpRequestHandler());// remove this handler, and process the requests as httppipeline.remove(this);ctx.sendUpstream(e);} else {// were still in protocol negotiation, no need for any handlers// at this point.}} } 使用NPN API和当前的SSL上下文我们可以检索之前添加的SimpleServerProvider。 我们检查是否已设置selectedProtocol如果已设置则设置一条链进行处理。 我们在此类中处理三个选项 没有协议 可能尚未协商任何协议。 在那种情况下我们没有做任何特别的事情只需正常处理即可。 有一个http协议 我们建立了一个处理程序链来处理HTTP请求。 有一个spdy协议 我们建立了一个处理程序链来处理SPDY请求。 有了这个链我们最终由HttpRequestHandler接收到的所有消息都是HTTP请求。 我们可以正常处理此HTTP请求然后返回HTTP响应。 各种管道配置将正确处理所有这些问题。 确保使用HTTP发送回正确的SPDY标头 我们需要做的最后一步是测试。 我们将使用最新版本的Chrome进行测试以测试SPDY是否正常运行并使用wget测试正常的http请求。 我提到了链中最后一个处理程序HttpRequestHandler进行我们的HTTP处理。 我已经使用http://netty.io/docs/stable/xref/org/jboss/netty/example/http/snoop/Http…作为HTTPRequestHandler因为那很好地返回了有关HTTP请求的信息而我却没有做任何事。 如果不做任何更改就运行它则会遇到问题。 为了将HTTP响应与正确的SPDY会话相关联我们需要将传入请求中的标头复制到响应中“ X-SPDY-Stream-ID”标头。 我将以下内容添加到HttpSnoopServerHandler中以确保复制了这些标头实际上应该在单独的处理程序中完成此操作。 private final static String SPDY_STREAM_ID X-SPDY-Stream-ID;private final static String SPDY_STREAM_PRIO X-SPDY-Stream-Priority;// in the writeResponse method addif (request.containsHeader(SPDY_STREAM_ID)) {response.addHeader(SPDY_STREAM_ID,request.getHeader(SPDY_STREAM_ID));// optional header for prioresponse.addHeader(SPDY_STREAM_PRIO,0);} 现在剩下的就是一台具有启动所有内容的主服务器的服务器并且我们可以测试SPDY实现。 public class SPDYServer {public static void main(String[] args) {// bootstrap is used to configure and setup the serverServerBootstrap bootstrap new ServerBootstrap(new NioServerSocketChannelFactory(Executors.newCachedThreadPool(),Executors.newCachedThreadPool()));bootstrap.setPipelineFactory(new SPDYPipelineFactory());bootstrap.bind(new InetSocketAddress(8443));} } 启动服务器启动Chrome然后查看是否一切正常。 打开https// localhost8443 / thisIsATest网址您应该得到如下所示的结果 在服务器的输出中您可以看到一些NPN调试日志记录 [S] NPN received for 68ce4f39[SSLEngine[hostnamenull port-1] SSL_NULL_WITH_NULL_NULL] [S] NPN protocols [spdy/2, http/1.1] sent to client for 68ce4f39[SSLEngine[hostnamenull port-1] SSL_NULL_WITH_NULL_NULL] [S] NPN received for 4b24e48f[SSLEngine[hostnamenull port-1] SSL_NULL_WITH_NULL_NULL] [S] NPN protocols [spdy/2, http/1.1] sent to client for 4b24e48f[SSLEngine[hostnamenull port-1] SSL_NULL_WITH_NULL_NULL] [S] NPN selected spdy/2 for 4b24e48f[SSLEngine[hostnamenull port-1] SSL_NULL_WITH_NULL_NULL] 额外的检查是使用以下网址查看chrome浏览器中打开的SPDY会话chrome// net-internals /spdy 现在让我们检查普通的旧HTTP是否仍在工作。 从命令行执行以下操作 josJoss-MacBook-Pro.local:~$ wget --no-check-certificate https://localhost:8443/thisIsATest --2012-04-27 16:29:09-- https://localhost:8443/thisIsATest Resolving localhost... ::1, 127.0.0.1, fe80::1 Connecting to localhost|::1|:8443... connected. WARNING: cannot verify localhosts certificate, issued by /CNL/STNB/LWaalwijk/Osmartjava/OUsmartjava/CNlocalhost:Self-signed certificate encountered. HTTP request sent, awaiting response... 200 OK Length: 285 Saving to: thisIsATest100%[] 285 --.-K/s in 0s 2012-04-27 16:29:09 (136 MB/s) - thisIsATest saved [285/285]josJoss-MacBook-Pro.local:~$ cat thisIsATest WELCOME TO THE WILD WILD WEB SERVERVERSION: HTTP/1.1 HOSTNAME: localhost:8443 REQUEST_URI: /thisIsATestHEADER: User-Agent Wget/1.13.4 (darwin11.2.0) HEADER: Accept */* HEADER: Host localhost:8443 HEADER: Connection Keep-AlivejosJoss-MacBook-Pro.local:~$ 而且有效 Wget使用标准的HTTPS我们得到一个结果而chrome使用SPDY并从同一处理程序中呈现结果。 在最后的几天里我还将发布有关如何为Play Framework 2.0启用SPDY的文章因为它们的Web服务器也基于Netty。 参考来自Smart Java博客的JCG合作伙伴 Jos Dirksen 透明地使用Netty使用SPDY和HTTP 。 翻译自: https://www.javacodegeeks.com/2012/05/netty-using-spdy-and-http-transparently.html
http://wiki.neutronadmin.com/news/122633/

相关文章:

  • 贵阳网站开发番禺建设网站多少钱
  • 做的网站怎样百度能搜到中心网站建设方法
  • 论文网站开发城市建设法规考试网站
  • 网站开发好吗仿 手机 网站模板html源码下载
  • 编程网站项目做哪个比较好网站不想被收录
  • 黔西南州网站建设厦门房地产网站建设
  • 网站优化资源网站建设怎么添加视频
  • 建设c2c网站需要多少投资如何做京东购物网站
  • 义乌建设公司网站网站开发什么语言比较快
  • wordpress修改密码关键词搜索优化公司
  • 业务网站制作开发一个网页具体流程
  • 安庆市建设局网站开公司做购物网站是不是想多了
  • 公司注册网站有什么好处网站开发个人总结
  • 个人网站名称 备案微信引流推广怎么做
  • 做金融网站违法吗临沂网站建设找谁
  • idc销售网站源码微网站建设报价方案
  • 简历在线制作网站织梦电子行业网站模板
  • 班级网站制作教程建立网站tk
  • 怎么做刷业网站云南建设投资控股集团有限公司网站
  • 厦门协会网站建设网站的标题与关键词
  • 广告传媒网站模板网络整合营销的概念
  • 网站基础建设网站建设及维护保密协议
  • 自己做的网站微信pc端显示乱码营销型网站定做
  • 做现货需要关注的网站ec2 wordpress
  • 互联网大赛建设网站策划书信息发布网站开发
  • 创建个人商城网站建网站开发费用
  • 单页网站如何做cpa学习做网站只学过c
  • 佛山企业网站seo建筑建材网站建设
  • 购物网站开发需求分析网站建设优化公司哪家好
  • 21dove谁做的的网站鞍山做网站专业公司