客户端-服务器端互动比较与原生实例(比较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

时间: 2024-11-25 11:45:33

客户端-服务器端互动比较与原生实例(比较ajax,server-sent event,websocket/netsocket)的相关文章

GCM(谷歌云推送)客户端服务器端开发全指南(服务器篇)

今天我们按照之前所说的步骤介绍GCM云推送服务端的开发,因为服务端的开发比客户端的开发较简单,遵从由易到难,一步一步攻破的原则,所以我先于客户端讲服务端的开发,话不多说,让我们开始吧! 首先我们依旧来到首页 这次我们点击指南,进入到GCM开发Overview,这里概括了GCM客户端服务器端开发流程. 根据以下的流程图我们不难看出服务端和GCM的通信方式有两种 1.Http协议 2.Xmpp协议 Xmpp协议常用于双向通信,我们这里暂时不需要,因此果断选择Http协议来开发. 英语比较好的朋友可以

IOS Socket 04-利用框架CocoaAsyncSocket实现客户端/服务器端

这篇文章,我们介绍CocoaAsyncSocket框架的使用,主要介绍实现客户端/服务器端代码,相信在网上已经很多这样的文章了,这里做一下自己的总结.这里介绍使用GCD方式 一.客户端 1.下载地址 读者可以在github下载框架源码 https://github.com/robbiehanson/CocoaAsyncSocket 下载后,可以看到在Examples下面可以看到很多例子,如果读者自学能力高,可以略过下面的文章. 2.开始使用 1)在 \Source\GCD 目录下,我们可以看到G

原生javascript实现Ajax和jQuery实现Ajax实例应用

这是我自己写的例子,希望对大家有帮助 使用了struts2,jdk1.6 1.实体类书写 public class Student { private String toid ; private String name ; private String sex ; public String getToid() { return toid ; } public void setToid(String toid) { this.toid = toid; } public String getNam

原生 JavaScript 实现 AJAX、JSONP

相信大多数前端开发者在需要与后端进行数据交互时,为了方便快捷,都会选择JQuery中封装的AJAX方法,但是有些时候,我们只需要JQuery的AJAX请求方法,而其他的功能用到的很少,这显然是没必要的. 其实,原生JavaScript实现AJAX并不难,这篇文章将会讲解如何实现简单的AJAX,还有跨域请求JSONP! 一.AJAX AJAX的核心是XMLHttpRequest. 一个完整的AJAX请求一般包括以下步骤: 实例化XMLHttpRequest对象 连接服务器 发送请求 接收响应数据

用原生JavaScript写AJAX

//原生js写ajax就像打电话 //打电话分下面4步//1.拿出手机//2.拨号//3.说话//4.听对方说话 //ajax也分下面4步//1.创建ajax对象//2.连接到服务器//3.发送请求(告诉服务器我要什么文件)//4.接收返回值 下面是原生js写ajax的具体写法 <script> window.onload=function() { var oBtn = document.getElementById("btn1"); oBtn.onclick = func

原生JS的Ajax技术

1.同步和异步 同步现象:客户端发送请求到服务器端,当服务器返回响应之前,客户端都处于等待  卡死状态 异步现象:客户端发送请求到服务器端,无论服务器是否返回响应,客户端都可以随意做其他事情,不会被卡死 2.ajax运行原理 页面发起请求,会将请求发送给浏览器内核中的Ajax引擎,Ajax引擎会提交请求到 服务器端, 在这段时间里,客户端可以任意进行任意操作,直到服务器端将数据返回给Ajax引擎后, ajax引擎会监听到ajax的状态改变,触发你设置的事件,从而执行自定义的js逻辑代码完成某种页

原生js实现ajax封装

一.什么是ajax? 定义:Ajax(Asynchronous Java and XML的缩写)是一种异步请求数据的web开发技术,在不需要重新刷新页面的情况下,Ajax 通过异步请求加载后台数据,并在网页上呈现出来. 作用:提高用户体验,减少网络数据的传输量 二.ajax常见运用场景 表单验证是否登录成功.百度搜索下拉框提示和快递单号查询等等. 三.Ajax原理是什么 Ajax请求数据流程,其中最核心的依赖是浏览器提供的对象xhr,它扮演的角色相当于秘书,使得浏览器可以发出HTTP请求与接收H

通过原生js的ajax或jquery的ajax获取服务器的时间

在实际的业务逻辑中,经常是与时间相关的,而前端能获得的时间有两个:客户端的时间,服务器的时间.客户端时间通过 javascript中的Date对象可以获取,如 Java代码   var dt = new Date(); var tm = dt.getTime(); 那么tm就是客户端的时间,另外也可以通过对应的getFullYear(),getMonth(),getDate()取到对应的年月日等...但这个时间可靠吗?好吧,那取服务器时间吧经常用到的是后台写一个php,jsp,cgi,asp..

原生JS实现Ajax及Ajax的跨域请求

  前  言          如今,从事前端方面的程序猿们,如果,不懂一些前后台的数据交互方面的知识的话,估计都不太好意思说自己是程序猿.当然,如今有着许多的框架,都有相对应的前后台数据交互的方法. 而,其中,用得最多的应该苏算是JQuery的Ajax了.但是,今天,影子向大家介绍的是原生js的Ajax,及跨域请求. 一. JQuery的Ajax 首先,先回忆下JQuery的Ajax写法: $.ajax({ url: , type: '', dataType: '', data: { }, s