在TCP连接开始到结束连接,之间可能会多次传输数据,也就是服务器和客户端之间可能会在连接过程中互相传输多条消息.理想状况是一方每发送一条消息,另一方就立即接收到一条,也就是一次write对应一次read.但是,现实不总是按照剧本来走. MINA官方文档节选: TCP guarantess delivery of all packets in the correct order. But there is no guarantee that one write operation on the s…
期中集群架构-第十二章-HTTPS安全证书访问连接实践配置========================================= 01:网络安全涉及的问题: ①. 网络安全问题-数据机密性问题     传输的数据可能会被第三方随时都能看到 ②. 网络安全问题-数据完整性问题      传输的数据不能随意让任何人进行修改 ③. 网络安全问题-身份验证问题     第一次通讯时,需要确认通讯双方的身份正确 02:网络安全涉及的问题: ①. 网络安全问题-数据机密性问题解决 a) 利用普通…
一.构造方法 构造方法的主要目的是为类中的属性初始化 二.构造方法的定义格式 class 类名称{ 访问权限 类名称(类型1 参数1,类型2 参数2,…){ 程序语句 ; …    // 构造方法没有返回值 } } 在构造方法的声明中读者一定要牢记以下几点: · 构造方法的名称必须与类名称一致 · 构造方法的声明处不能有任何返回值类型的声明 · 不能在构造方法中使用return返回一个值 class Person { private String name; // 声明姓名属性 private…
由于HTTPS协议是由HTTP协议加上SSL/TLS协议组合而成,在阅读本文前可以先阅读一下HTTP服务器和SSL/TLS两篇博文,本文中的代码也是由这两篇博文中的代码组合而成. HTTPS介绍 上一篇博文中介绍了SSL/TLS协议,我们平时接触最多的SSL/TLS协议的应用就是HTTPS协议了,现在可以看到越来越多的网站已经是https开头了,百度搜索也由曾经的http改为https.有关百度为什么升级https推荐阅读:http://zhanzhang.baidu.com/wiki/383…
要想开发一个高性能的TCP服务器,熟悉所使用框架的线程模型非常重要.MINA.Netty.Twisted本身都是高性能的网络框架,如果再搭配上高效率的代码,才能实现一个高大上的服务器.但是如果不了解它们的线程模型,就很难写出高性能的代码.框架本身效率再高,程序写的太差,那么服务器整体的性能也不会太高.就像一个电脑,CPU再好,内存小硬盘慢散热差,整体的性能也不会太高. 玩过Android开发的同学会知道,在Android应用中有一个非常重要线程:UI线程(即主线程).UI线程是负责一个Andro…
HTTP协议应该是目前使用最多的应用层协议了,用浏览器打开一个网站就是使用HTTP协议进行数据传输. HTTP协议也是基于TCP协议,所以也有服务器和客户端.HTTP客户端一般是浏览器,当然还有可能是其他东西.HTTP服务器,也就是Web服务器,目前已经有很多成熟的产品,例如Apache HTTP Server.Tomcat.Nginx.IIS等. 本文的内容不是讲解如何使用以上的HTTP服务器,而是要分别用MINA.Netty.Twisted实现一个简单的HTTP服务器. 首先,要简单了解一下…
用过JavaScript或者jQuery的同学都知道,JavaScript特别是jQuery中存在大量的回调函数,例如Ajax.jQuery的动画等. $.get(url, function() { doSomething1(); // (3) }); // (1) doSomething2(); // (2) 上面的代码是jQuery的Ajax,由于Ajax是异步的,所以在请求URL的过程中并不会阻塞程序,也就是程序运行到(1)并不用等待Ajax请求的结果,就继续往下执行(2).而$.get的…
消息传递有很多种方式,请求/响应(Request/Reply)是最常用的.在前面的博文的例子中,很多都是采用请求/响应的方式,当服务器接收到消息后,会立即write回写一条消息到客户端.HTTP协议也是基于请求/响应的方式. 但是请求/响应并不能满足所有的消息传递的需求,有些需求可能需要服务端主动推送消息到客户端,而不是被动的等待请求后再给出响应. 发布/订阅(Publish/Subscribe)是一种服务器主动发送消息到客户端的消息传递方式.订阅者Subscriber连接到服务器客户端后,相当…
开发过Web应用的同学应该都会使用session.由于HTTP协议本身是无状态的,所以一个客户端多次访问这个web应用的多个页面,服务器无法判断多次访问的客户端是否是同一个客户端.有了session就可以设置一些和客户端相关的属性,用于保持这种连接状态.例如用户登录系统后,设置session标记这个客户端已登录,那么访问别的页面时就不用再次登录了. 不过本文的内容不是Web应用的session,而是TCP连接的session,实际上二者还是有很大区别的.Web应用的session实现方式并不是基…
protobuf是谷歌的Protocol Buffers的简称,用于结构化数据和字节码之间互相转换(序列化.反序列化),一般应用于网络传输,可支持多种编程语言. protobuf如何使用这里不再介绍,本文主要介绍在MINA.Netty.Twisted中如何使用protobuf,不了解protobuf的同学可以去参考我的另一篇博文. 在前面的一篇博文中,有介绍到一种用一个固定为4字节的前缀Header来指定Body的字节数的一种消息分割方式,在这里同样要使用到.只是其中Body的内容不再是字符串,…