webSocket和socket.IO

http://nodejs.cn/api/https.htmljavascript

HTTP難以實現實時數據傳輸 1長輪詢 ajax 2長鏈接html

websocket 協議可以讓 瀏覽器和服務器互相通訊,服務器也能主動通知客戶端java

原理: 利用http請求產生握手,http頭部憨厚webSocket協議的請求,握手以後,二者使用tcp協議進行交流 (qq的協議) 2.websocket協議須要瀏覽器和服務器同時支持
node 0 apache 7.02 nginx 1.3node

網址:http://socket.io/nginx

先要npm下載這個庫 npm install socket.ioweb

socket.io 還爲不支持webSocket協議瀏覽器,提供了長輪詢的透明模擬機制ajax

var http=require("")express

當server建立出來以後,調用io函數,取得一個socket對象 var socket=io();apache

  • 寫原生的JS,搭建一個服務器,server建立好以後,建立一個io對象
var http = require("http");

var server = http.createServer(function(req,res){
	res.end("你好");
});

var io = require('socket.io')(server);
//監聽鏈接事件
io.on("connection",function(socket){
	console.log("1個客戶端鏈接了");
})
server.listen(3000,"127.0.0.1");

寫完這句話以後,你就會發現,http://127.0.0.1:3000/socket.io/socket.io.js 就是一個js文件的地址了。 此時,在服務器上,app.js中就要書寫靜態文件呈遞程序,可以呈遞靜態頁面npm

  • 如今須要製做一個index頁面,這個頁面中,必須引用祕密js文件。調用io函數,取得socket對象。
1<!DOCTYPE html>
2<html lang="en">
3<head>
4	<meta charset="UTF-8">
5	<title>Document</title>
6</head>
7<body>
8	<h1>我是index頁面,我引用了祕密script文件</h1>
9	<script type="text/javascript" src="/socket.io/socket.io.js"></script>
10	<script type="text/javascript">
11		var socket = io();
12	</script>
13</body>
</html>
  • 此時,在服務器上,app.js中就要書寫靜態文件呈遞程序,可以呈遞靜態頁面。
1var server = http.createServer(function(req,res){
2	if(req.url == "/"){
3		//顯示首頁
4		fs.readFile("./index.html",function(err,data){
5			res.end(data);
6		});
7	}
8});

至此,服務器和客戶端都有socket對象了。服務器的socket對象:

服務器端的:

1var io = require('socket.io')(server);
2//監聽鏈接事件
3io.on("connection",function(socket){
4	console.log("1個客戶端鏈接了");
5	socket.on("tiwen",function(msg){
6		console.log("本服務器獲得了一個提問" + msg);
7		socket.emit("huida","吃了");
8	});
9});

每個鏈接上來的用戶,都有一個socket。 因爲咱們的emit語句,是socket.emit()發出的,因此指的是向這個客戶端發出語句。

廣播,就是給全部當前鏈接的用戶發送信息:

1//建立一個io對象 
2var io = require('socket.io')(server);
3//監聽鏈接事件
4io.on("connection",function(socket){  //  服務器的socket是經過回調函數得到的
5	console.log("1個客戶端鏈接了");
6	socket.on("tiwen",function(msg){
7		console.log("本服務器獲得了一個提問" + msg);
                 socket.emit("huida","吃了");      //  單個發送socket
8		io.emit("huida","吃了");         //  就是給全部當前鏈接的用戶發送信息:
9	});
10});

io.on 監聽 io.emit 發送

express和socket.io配合使用

●Express框架能夠和Socket.IO搭配使用,可是不能像一般的Express程序那樣,用app.listen進行監聽了,而是採用一種固定的模式: var express = require('express'); var app = express(); var http = require('http').Server(app); var io = require('socket.io')(http);

http.listen(3000);

//session公式: var session = require('express-session'); app.use(session({ secret: 'keyboard cat', resave: false, saveUninitialized: true }));

相關文章
相關標籤/搜索