首先说websocket是双向通信,主要用在做 直播的网站了,各种的数据交互等等;
而ajax是单向通信。
优点
较少的控制开销。在连接创建后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。在不包含扩展的情况下,对于服务器到客户端的内容,此头部大小只有2至10字节(和数据包长度有关);对于客户端到服务器的内容,此头部还需要加上额外的4字节的掩码。相对于HTTP请求每次都要携带完整的头部,此项开销显著减少了。
更强的实时性。由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少;即使是和Comet等类似的长轮询比较,其也能在短时间内更多次地传递数据。
保持连接状态。于HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。
更好的二进制支持。Websocket定义了二进制帧,相对HTTP,可以更轻松地处理二进制内容。
可以支持扩展。Websocket定义了扩展,用户可以扩展协议、实现部分自定义的子协议。如部分浏览器支持压缩等。
更好的压缩效果。相对于HTTP压缩,Websocket在适当的扩展支持下,可以沿用之前内容的上下文,在传递类似的数据时,可以显著地提高压缩率。
WebSocket 是独立的、创建在 TCP 上的协议。·
Websocket 通过 HTTP/1.1 协议的101状态码进行握手。
为了创建Websocket连接,需要通过浏览器发出请求,之后服务器进行回应,这个过程通常称为“握手”(handshaking)。
来源:前端开发博客
先说 node.js中都是有哪些模块呢?
http
fs
mysql
那么websocket是socket.io;
在node.js中 我们都有学到emit是发射数据,on是接收数据。
那么咱们就按着这样的套路写一下websocket来完成双向 通信。
再来说一下所在 的问题:
1.node服务器
2.端口
3.包 找不到
安装
重启
4.是在git bash
linux命令
官网:https://git-scm.com/
5.ws: //->http:// 内定的模块。不用问为什么,就得这么写。
现在我们要说一下具体的操作:
第一步
新建一个项目目录,在文件夹里右击-git Bash Here; 出现小黑框;
第二步
安装 npm install socket.io
输入-----node 文件名.js
第三步
在浏览器里输入对应的服务器名和端口号+文件名.html
那么咱们话不多说,下面是 我 做的一个 小例子,想实现的效果就是让服务器每一秒给我返回一个时间戳,仅供参考:
js文件:
var http= require('http');
var fs=require('fs');
var io=require('socket.io');
var httpObj=http.createServer(function(req,res){
fs.readFile('www'+req.url,function(err,data){
if(!err){
res.write(data);
res.end();
}else{
res.write('404');
res.end();
}
});
});
httpObj.listen('9090');
var ws=io.listen(httpObj);
ws.on('connection',function(socket){
//发送数据
setInterval(function(){
socket.emit('time',Date.now());
},1000);
socket.on('khd',function(name,value){
console.log(name,value);
});
});//有人链接我,双方建立链接
html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
</style>
<script src="/socket.io/socket.io.js"></script>
<script>
var ws=io.connect('ws://localhost:9090');
ws.on('time',function(result){
console.log(result);
});
ws.emit('khd','name','出来')
</script>
</head>
<body>
<p>我是不是你最疼爱的人</p>
</body>
</html>
那么文件的怎么摆放呢;现在就告诉大家