客户端-服务器端互动比较与原生实例(比较ajax,server-sent event,websocket/netsocket)
昨日学习了websocket的原生实例,觉得有必要把几种常见的客户端-服务器端无刷新交互形式列举比较:
一、Ajax:客户端决定何时主动向Server端发请求
如:无刷新评论、无刷新更换图片。
主要目的是为了无刷新客户体验,但都是客户端的操作来触发向Server发送请求。
实例网上很多,原生的js或封装了的jQurey都算比较常用、易懂、易自助修改的方式。
二、Server-sent event:定时由Server端向客户端推送内容
如:每秒推送股市动态、每秒推送体育比赛文字转播。
特点是客户端只需要发送一次“来吧,请蹂躏我吧”的请求(可打开页面就自动发送,减少用户操作),Server就定时推送。缺点是耗流量。
原生实例可参照w3school:服务器发送事件(http://www.w3school.com.cn/html5/html_5_serversentevents.asp)
三、Socket网络通信:双方平等,自由交互,我想发给你时你才需要接收
如:聊天场景。
特点是省流量,客户端什么时候想发就发,服务器端什么时候想回就回,两边都有监听者socket在负责。
我最初学习的是.Net Socket,是基于.net框架的网络通信,一般实例用的控制台程序或WinForm来做。
昨日新接触了WebSocket,与Net Socket主要区别是面向浏览器端(用web所以叫websocket),需要HTML5支持,浏览器大都支持(ie10以上,最新FF、Chrome都支持,听说Safari曾觉得此技术不安全暂时取消了支持),最可惜是需要.net4.5及以上版本才可以,即:.net4.0下是没有System.Web.WebSocket这个命名空间(不知道另导dll有没有用)——然而WinServer2003最多支持到.net4.0……
.net4.0下又想用web的形式、又想用socket:NetSocket做成控制台程序,ui继续用web(html+js)发送ws协议的请求到控制台程序即可。
原生实例参考:Leo的(http://www.cnblogs.com/Leo_wl/archive/2013/04/12/3016063.html),文章提及了上述的形式,仅有一处笔误:GetSecKeyAccept()方法中附加的字符串少了一个“-”(在E914之前)。应该是:byte[] encryptionString = SHA1.Create().ComputeHash(Encoding.ASCII.GetBytes(key + "258EAFA5-E914-47DA-95CA-C5AB0DC85B11"));
笔者也写了一份实例demo,支持多开web对同一server进行通信,请看笔者“在线捉鬼”系列的svn代码:
svn地址:https://115.29.246.25/svn/Catghost/ 账号:guest 密码:guest
第12版本日志:
1. 模拟服务器端:启动NetSocketDemo.Server项目
2. 模拟客户端:访问Catghost.WebSocketDemo项目的Demo40.html页面(可多开)
四、其他关键词:SignalR(服务器推送),轮询,Socket4Net(客户端封装),SuperSocket(服务器端封装)
在学习的过程中遇到较多的其他关键词,列出以备读者拓展学习。
SignalR还没学过,轮询是概念理解。
Socket4Net是对Socket的客户端封装:http://websocket4net.codeplex.com
SuperSocket是对Socket的服务器端封装:http://superwebsocket.codeplex.com
客户端-服务器端互动比较与原生实例(比较ajax,server-sent event,websocket/netsocket)的更多相关文章
- IOS Socket 04-利用框架CocoaAsyncSocket实现客户端/服务器端
这篇文章,我们介绍CocoaAsyncSocket框架的使用,主要介绍实现客户端/服务器端代码,相信在网上已经很多这样的文章了,这里做一下自己的总结.这里介绍使用GCD方式 一.客户端 1.下载地址 ...
- 原生 JavaScript 实现 AJAX、JSONP
相信大多数前端开发者在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的 ...
- 原生JavaScript实现AJAX、JSONP
相信大多数前端开发者在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的 ...
- 原生JS的Ajax技术
1.同步和异步 同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待 卡死状态 异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都可以随意做其他事情,不会被卡 ...
- 用原生JavaScript写AJAX
//原生js写ajax就像打电话 //打电话分下面4步//1.拿出手机//2.拨号//3.说话//4.听对方说话 //ajax也分下面4步//1.创建ajax对象//2.连接到服务器//3.发送请求( ...
- 原生js写Ajax
//原生js写ajax就像打电话 //打电话分下面4步//1.拿出手机//2.拨号//3.说话//4.挺对方说话 //ajax也分下面4步//1.创建ajax对象//2.连接到服务器//3.发送请求( ...
- 原生js实现ajax封装
一.什么是ajax? 定义:Ajax(Asynchronous Java and XML的缩写)是一种异步请求数据的web开发技术,在不需要重新刷新页面的情况下,Ajax 通过异步请求加载后台数据,并 ...
- 原生js实现Ajax
一般来说,大家可能都会习惯用JQuery提供的Ajax方法,但是用原生的js怎么去实现Ajax方法呢? JQuery提供的Ajax方法: $.ajax({ url: , type: '', dataT ...
- 原生JS实现Ajax及Ajax的跨域请求
前 言 如今,从事前端方面的程序猿们,如果,不懂一些前后台的数据交互方面的知识的话,估计都不太好意思说自己是程序猿.当然,如今有着许多的框架,都有相对应的前后台数据交互的方法. ...
随机推荐
- Android adb shell学习心得(四)
1.awk中的sub sub为替换函数.形式如 sub(/1/,"",$2) 将第二个变量的第一个1替换为空,若将sub替换为gsub.则替换全部的1. 2.awk中的-F 分隔符 ...
- java线程总结(4/5)
转自:http://blog.csdn.net/qiaqia609/article/details/8067356 整理的一些关于线程的面试题目: 46.java中有几种方法可以实现一个线程?用什么关 ...
- Solidworks如何设置零件材料,如何评估零件质量
右击材质,然后编辑材料,在弹出菜单中在Solidworks materials中选择零件材料(一般钢或者铁,注意质量密度是否跟你需要的一致),完成之后点击应用和关闭 在评估-质量属性中可以看到当前 ...
- <译>Spark Sreaming 编程指南
Spark Streaming 编程指南 Overview A Quick Example Basic Concepts Linking Initializing StreamingContext D ...
- 04-hibernate注解-一对一双向外键关联
一对一双向外键 1,主控方的配置同一对一单向外键关联. 2,@OneToOne(mappedBy="card") //被控方 @OneToOne(mappedBy="ca ...
- bootstrap 警告
本章将讲解警告(Alerts)以及Bootstrap所提供的用于警告的class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加 ...
- Js日常笔记之this
在javascript中自己创建构造函数时可以利用this来指向新创建的对象上.这样就可以避免函数中的this指向全局了,如下 var x = 2; function test(){ this.x = ...
- 利用email.net设置网络代理发邮件
近期在做一个项目,客户的内部网络须要设置代理才干收发邮件,本来一个简单的东西突然变得复杂了,在baidu搜索了非常久都没找到适合的组件.baidu就像个废物一样,没办法仅仅能去yahoo搜,结果在微软 ...
- LNMP架构四
php-fpm的pool(连接池) 我们查看php的进程时,会发现,在最后一个pool的选项,而这个就是我们在php-fpm配置文件里写的一个连接池. [root@bogon linux.com]# ...
- Mongodb更新数组$pull修饰符
http://blog.csdn.net/yaomingyang/article/details/78701643 一.$pull修饰符会删除掉数组中符合条件的元素,使用的格式是: { $pull: ...