javascript客户端与服务器端通信

高性能的网络通信包括以下方面:选择正确的数据格式和与之匹配的传输技术。

一、数据格式

  用于传输的数据格式有:

    1)html,仅适用于特定场合,传输数据量大,不过它可以节省客户端的CPU周期,

    2)XMl,相对笨重并且解析缓慢;

    3)json 轻量级,解析速度快

    4)字符分割的自定义格式十分轻量级,在解析大量数据集时快,不过需要编写额外的服务端构造程序,并在客户端解析。在创建自定义格式时,最重要的决定之一就是采用哪种分隔符,理想情况下,它应该是一个单字符,而且不应该存在于数据中,ASCII字符表的前几个字符在大多数服务端语言中能够正常工作而且容易书写,当然也可以作为split的承诺书。如\u0001,\u0002等。

二、客户端向服务器请求数据

  有五种常用技术用于向服务器请求数据。

  1)XMLHttpRequest(XHR)

  2)动态脚本注入

  3)iframes

  4)comet

  5)Multipart XHR

  其中,comet和iframes使用在极端情况下,这里不多做介绍。

2.1 XHR

  这是ajax的基础,用得很多了,它提供了最完善的控制和灵活性,可以设置或者修改http的请求头,并会把接收到的所有数据当成一个字符串,这有可能会降低解析速度。

2.2 动态脚本注入(jsonP的原理,和sql注入不同)

  动态脚本注入允许跨域请求和本地执行javascript和json,但是接口并不安全,以下是一个动态脚本注入的案例。、

  动态脚本注入提供的控制是有限的,不能设置请求的头信息,参数传递也只能采用GET方式,而非post。不能设置请求的超时处理或者重试。事实上,就算失败了也不一定知道。必须等待所有数据都已返回,才可以访问它们。

  此外重要的一点是,响应消息作为脚本标签的源码,必须是可执行的javascript代码,不能使用纯xml,纯json或者其他任何格式的数据,无论哪种格式,都必须封装在一个回调函数中。

  作为响应消息的js(dataStuct.js)代码:

function callback(name,age){
    return ‘{"name":name,"age":age}‘
}

  调用部分的代码如下:

//动态脚本注入
var scriptElement=document.createElement(‘script‘);
scriptElement.src=".dataStruct.js";
document.getElementsByTagName(‘head‘)[0].appendChild(scriptElement);

var data=callback(‘bobo‘,27);
console.log(data);//输出{"name":"bobo","age":"27"}
console.log(JSON.parse(data).name);//输出bobo

使用这种技术,响应消息作为javascript直接执行,无需进一步处理。因此成为客户端获取并解析数据最快的方法,但是这种技术无法实现权限和访问控制,因此从那些无法控制的服务器上请求数据需要格外小心。

2.3 Multipart XHR

Multipart XHR是一种新技术,允许客户端只有一个http请求就可以从服务器向客户端传送多个资源,在这种技术中,任何数据类型都可以被javascript作为字符串发送。通过在服务器将资源(CSS文件,html片段,javascript代码或者base64编码的图片)打包成为一个由双方原定的字符分割的长字符串发送到客户端。然后javascript代码处理这个长字符串,并根据它的mime-type类型和传入的其他“头信息”解析出每个资源。以图片为例,图片不是由base64字符串转换成二进制,而是使用data:url的方式创建,并制定mime-type为images/jpg.

具体的实现代码这里暂略。

Multipart XHR最大的缺点是以这种方式获得的资源不能被浏览器缓存。因此在页面包含了大量其他地方用不到的资源(因此也无须缓存),尤其是图片的时候适用。毕竟http请求是ajax最大的瓶颈之一,因此减少其需求数量也会整个页面的性能有很多大提升。(感觉很适合于基站巡检系统图片的性能提升中)

3.客户端只需要向服务器发送数据

如果仅仅需要将数据发送到服务器,无需服务器返回数据时,有两种广泛使用的技术:XHR和信标。

  3.1 XHR

XHR就不多说了,既可以用于向服务器发送数据,也可用于向服务器请求数据。

  3.2图片信标(beacons)

  

时间: 2024-10-24 18:04:15

javascript客户端与服务器端通信的相关文章

C#Socket_TCP(客户端,服务器端通信)

客户端与服务器通信,通过IP(识别主机)+端口号(识别应用程序). IP地址查询方式:Windows+R键,输入cmd,输入ipconfig. 端口号:可自行设定,但通常为4位. 服务器端: using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading.Tasks;

201506120856_《JavaScript——客户端与服务器端的通信》

在Web项目中,要实现客户端与服务端的交互,可通过cookie.隐藏框架.HTTP请求.LiveConnect请求和智能HTTP请求等方式实现, 一.             cookie cookie是第一个JavaScript可以利用的客户端-服务端之间的交互手段.浏览器向服务器发送请求时,为这个服务器存储的cookie会与其他信息一起发送到服务器.这使得JavaScript可以在客户端设置一个cookie,之后服务器端就能够读取它了. 1.    cookie的成分 名称——每一个cook

上机题目(初级)- Java网络操作-Socket实现客户端和服务器端通信二(Java)

上一节实现了客户端像服务器端发送请求,本节将实现服务器端向客户端回传信息,实现原理很简单,在原来的基础上,在服务器端实现输出流,在客户端实现输入流即可,具体代码如下: 服务器端: package com.socket.demo; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.i

JavaScript中利用Ajax 实现客户端与服务器端通信(九)

一:Ajax (Asynchronous JavaScript and XML)不是一个新的技术,事实上,它是一些旧有的成熟的技术以一种全新的更加强大的方式整合在一起 Ajax的关键技术: 1.使用XHTML(HTML)和CSS构建标准化的展示层 2.使用DOM进行动态显示和交互 3.使用XML和XSLT进行数据交换和操纵 4.使用XMLHttpRequest异步获取数据 5.使用JavaScript将所有元素绑定在一起 二:如何去写Ajax应用程序: 第一步:创建一个XMLHTTP对象 第二的

Android 实现蓝牙客户端与服务器端通信

一.首先说明:蓝牙通信必须用手机测试,因为avd里没有相关的硬件,会报错! 好了,看看最后的效果图: 二.概述: 1.判断是否支持Bluetooth BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); if(bluetoothAdapter == null) { //the device doesn't support bluetooth } else { //the device support b

微风IM 3.3 系列之三 客户端与服务器端通信模式

通信框架为networkcomms 2.3.1 使用TCP通信时,客户端端发送消息给服务器,比如 A消息是登陆消息 B消息是更新密码消息 服务器端如何区分A与B,并调用相应的处理器呢? NetworkComms通信框架采用这样的机制:  客户端为每个消息分派一个“消息类型”,服务器端根据“消息类型”,找到相应的处理器. 以“登陆消息”为例 客户端代码: //在契约类中保存用户名和密码 UserInfo userInfo = new UserInfo(); userInfo.UserID = tx

asp.net javascript客户端调用服务器端方法

如何用js调用服务器端方法.首先服务器端方法的格式如下 [System.Web.Services.WebMethod]        public static void serverMethod(string url)        {            WebClient wc = new WebClient();            StringBuilder postData = new StringBuilder();            postData.Append("mu

客户端到服务器端的通信过程及原理

学习任何东西,我们只要搞清楚其原理,就会触类旁通.现在结和我所学,我想总结一下客户端到服务器端的通信过程.只有明白了原理,我们才会明白当我们程序开发过程中错误的问题会出现在那,才会更好的解决问题. 我们首先要了解一个概念性的词汇:Socket socket的英文原义是“孔”或“插座”.作为进程通信机制,取后一种意思.通常也称作“套接字”,用于描述IP地址和端口,是一个通信链的句柄.(其实就是两个程序通信用的.)socket非常类似于电话的插座.以一个电话网为例.电话的通话双方相当于相互通信的2个

客户端和服务器端的通信(Socket编程)

Socket编程 此篇博文的来源 自己一直以为将网络编程这块的知识掌握的还可以了,今天突然有涉及客户端和服务器端的通信的这一块知识的应用,发现自己还不是那么的熟悉这一块,鼓捣了半天,因此就想通过此篇博文来记录一下,也希望能够给更对的朋友们一点帮助 废话不多说,直接上代码 客户端的代码如下 package org.wrh.socketserver; import java.io.FileInputStream; import java.io.InputStream; import java.io.