HTML5 Web socket和socket.io

HTML5的新特性,用于双向推送消息(例如网页聊天,手机推送消息等)

  原理:

  1. client利用regular http请求webpage
  2. 请求的webpage 执行javascript脚本,open a connection to server.
  3. 有新的信息时服务器和客户端可以相互发送信息(Real-time traffic from the server to the client and from the client to the server

  

 

客户端



  说明:

  readyState:

CONNECTING (0):表示还没建立连接;
OPEN (1): 已经建立连接,可以进行通讯;
CLOSING (2):通过关闭握手,正在关闭连接;
CLOSED (3):连接已经关闭或无法打开;

  

  url: WebSocket 服务器的网络地址,协议通常是”ws”或“wss(加密通信)”,

  事件:

  • send:向服务器端发送数据
  • close 方法就是关闭连接;
  • onopen连接建立,即握手成功触发的事件;
  • onmessage收到服务器消息时触发的事件;
  • onerror异常触发的事件;

 

  使用例子:

// 创建一个Socket实例
var socket = new WebSocket("ws://localhost:8080"); 

// 打开Socket
socket.onopen = function(event) { 

  // 发送一个初始化消息
  socket.send("I am the client and I\"m listening!"); 

  // 监听消息
  socket.onmessage = function(event) {
    console.log("Client received a message",event);
  }; 

  // 监听Socket的关闭
  socket.onclose = function(event) {
    console.log("Client notified socket has closed",event);
  }; 

  // 关闭Socket....
  //socket.close()
};

服务器端

 

jWebSocket (Java)
web-socket-ruby (ruby)
Socket IO-node (node.js)

 

下面以socket.io说明,环境说明:(node.js安装见 http://www.cnblogs.com/wishyouhappy/p/3647037.html)

1. 安装socket.io

     npm install -g socket.io

  2.使用require引入http和socket.io

var http = require("http");
var io= require("socket.io");

  3.创建server

var server = http.createServer(function(request, response){
    response.writeHead(200,{"Content-Type":"text/html"});
    response.write("WebSocket Start~~~~~~~~~~~~");
    response.end("");
}).listen(8000);

 4.监听

var socket= io.listen(server);

 5.例子:

var http = require("http");
var io= require("socket.io");
var server = http.createServer(function(request, response){
    response.writeHead(200,{"Content-Type":"text/html"});
    response.write("WebSocket Start~~~~~~~~~~~~");
    response.end("");
}).listen(8000);

var socket= io.listen(server); 

// 添加一个连接监听器
socket.on("connection", function(client){ 

  client.on("message",function(event){
    console.log("Received message from client!",event);
  });
  client.on("disconnect",function(){
    clearInterval(interval);
    console.log("Server has disconnected");
  });
});

数据发送两种方式send和emit

 

使用send和emit都可以发送数据,但是emit可以自定义事件,如下:

emit:

//服务器

socket.on("connection", function(client){
  client.on("message",function(event){
    client.emit("emitMessage", { hello: "messgge received, wish you happy"+new Date().toString() });
  });
 
});

//客户端
socket.on("emitMessage",function(data) {
  document.getElementById("result").innerHTML+=data.hello + "<br />";
 
});

send:

//服务器

socket.on("connection", function(client){
  client.send("hello, I am the server");
});

//客户端
socket.on("message",function(data) {
  document.getElementById("result").innerHTML+=data + "<br />";
 
});

 
实例:(socket.io)

 

客户端:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
div{
    border-radius: 10px;
    border: 2px solid pink;
    width:800px;
}
</style>
</head>
<body>
<h1></h1>
<div id="result"></div>
<script src="http://localhost:8000/socket.io/socket.io.js"></script>
<script>
//创建Socket.IO实例,建立连接

var socket = io.connect("http://localhost:8000");

// 添加一个连接监听器
socket.on("connect",function() {
  console.log("Client has connected to the server!");
});

// 添加一个连接监听器
socket.on("message",function(data) {
  document.getElementById("result").innerHTML+=data + "<br />";
 
});
socket.on("emitMessage",function(data) {
  document.getElementById("result").innerHTML+=data.hello + "<br />";
 
});

// 添加一个关闭连接的监听器
socket.on("disconnect",function() {
  console.log("The client has disconnected!");
});

// 通过Socket发送一条消息到服务器
function sendMessageToServer(message) {
  socket.send(message);
}
var date = new Date();
var ms="Time: "+date.toString()+"Today is a nice day, wish you happy";
setInterval("sendMessageToServer(ms)",1000);
</script>

</body>
</html>

服务器:

var http = require("http");
var io= require("socket.io");
var server = http.createServer(function(request, response){
    response.writeHead(200,{"Content-Type":"text/html"});
    response.write("WebSocket Start~~~~~~~~~~~~");
    response.end("");
}).listen(8000);

var socket= io.listen(server);

// 添加一个连接监听器
socket.on("connection", function(client){

  client.on("message",function(event){
    console.log("Received message from client!",event);
    client.emit("emitMessage", { hello: "messgge received, wish you happy"+new Date().toString() });
  });
  client.on("disconnect",function(){
   // clearInterval(interval);
    console.log("Server has disconnected");
  });
  client.send("hello, I am the server");
});

结果:

客户端:

服务器端:

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索websocket
, socket
, server
, client
, function
, websocket mqtt
, sockets
, response
, message
, js java 消息推送
, i socket io
, disconnect
, socket关闭
ios服务器
socket.io html5、html5 websocket、html5 websocket 示例、html5 websocket api、html5 websocket 直播,以便于您获取更多的相关知识。

时间: 2024-11-08 19:13:46

HTML5 Web socket和socket.io的相关文章

Demo源码放送:打通B/S与C/S !让HTML5 WebSocket与.NET Socket公用同一个服务端!

随着HTML5 WebSocket技术的日益成熟与普及,我们可以借助WebSocket来更加方便地打通BS与CS -- 因为B/S中的WebSocket可以直接连接到C/S的服务端,并进行双向通信.如下图所示: 一.对Socket Server的要求 我们可以尝试让Socket Server透明地支持WebSocket客户端,所谓透明的意思是,服务端开发人员不用关心客户端究竟是什么类型,而是可以统一的接收数据.处理数据.发送数据.为了做到这一点,我们可以构建一个服务端框架,让框架完成透明化的工作

02-Twisted 构建 Web Server 的 Socket 长链接问题 | 07.杂项 | Python

02-Twisted 构建 Web Server 的 Socket 长链接问题 郑昀 201005 隶属于<07.杂项> 背景 利用几句简单代码可以构建一个 Web Server: from twisted.internet import reactor from twisted.web.server import Site from my_webhandler import * reactor.listenTCP(8080, Site(MyWebResource.setup())) 更复杂的

HTML5 Web Storage

简介 HTML5 web storage, better than cookies. more secure and faster data store in name/value pairs the storage limit is at least 5MB     1. 发展过程:       2. 浏览器支持情况:       3. HTML5 Web Storage 提供如下两种对象: window.localStorage - stores data with no expiratio

利用Web存储工具创建HTML5 Web应用程序

HTML5 提供了新的语义元素,还提供了恰当的使用应用程序缓存器.JavaScript worker.新版本的 XMLHttpRequest 和一种名为 Web 存储的工具创建 HTML Web 应用程序的方式.本文将探讨 Web 存储的强大功能,以及它成为一种优于 cookies 的存储方法的原因.通过本文您将了解基本概念.浏览器支持和 HTML5 Web 存储对象. Cookies 从 JavaScript 出现之初就一直存在,所以在 Web 上存储数据并不是个新概念.不过Web 存储是数据

Html5 Web的5中离线存储方式之localStorage

Html5 Web的5中离线存储方式之localStorage 在HTML5越来越流行的今天,如果你还不知道离线存储,那就说明你落后了很多. HTML5的离线存储方式有多种:Web SQL Database.LocalStorage.Cookie.WebStorage.IndexedDB.FileSystem. Web SQL Database目前虽然还有浏览器支持,是唯一的关系数据库结构的存储,但W3C以及停止对其的维护和发展.我就不多说了. 今天我们主要看LocalStorage这种最简单的

JavaScript多线程之HTML5 Web Worker

在博主的前些文章Promise的前世今生和妙用技巧和JavaScript单线程和浏览器事件循环简述中都曾提到了HTML5 Web Worker这一个概念.在JavaScript单线程和浏览器事件循环简述中讲述了JavaScript出于界面元素访问安全的考虑,所以JavaScript运行时一直是被实现为单线程执行的:这也意味着我们应该尽量的避免在JavaScript中执行较长耗时的操作(如大量for循环的对象diff等)或者是长时间I/O阻塞的任务,特别是对于CPU计算密集型的操作. 例如在Jav

重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP

原文:重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP [源码下载] 重新想象 Windows 8 Store Apps (62) - 通信: Socket TCP, Socket UDP 作者:webabcd 介绍重新想象 Windows 8 Store Apps 之 通信 Socket - Tcp Demo Socket - 实现一个自定义的 http server Socket - Udp Demo 示例1.演示 soc

html5-开发HTML5 web和移动app用什么开发工具好呢?

问题描述 开发HTML5 web和移动app用什么开发工具好呢? 看了些html5的一些新闻,有推荐使用HBuilder的,试了下,是挺快的. 但是不知道现在主流的开发工具是什么? http://www.25xt.com/html5css3/6817.html 这个网站说2015必火的5个开发工具 解决方案 其实最牛逼的一种方式是用text文件编写,或者用Editplus这种方式比较好,特别是对于初学者来说.

html5 web sql database 能建数据库不能建表怎么回事

问题描述 html5 web sql database 能建数据库不能建表怎么回事 html5 web sql database 能建数据库不能建表怎么回事 现在是数据库能建起来 表建不起来 代码如下 <script type="text/javascript"> var db = openDatabase('mydb', '1.0', 'Test DB', 2 * 1024 * 1024); var msg; db.transaction(function (tx) {

HTML5 Web Worker 中的 JavaScript多线程讲解

JavaScript单线程 JavaScript这门语言运行在浏览器中,是以单线程的方式运行的.说到单线程,就得从操作系统进程开始说起.进程和线程都是操作系统的概念.进程是应用程序的执行实例,每一个进程都是由私有的虚拟地址空间.代码.数据和其它系统资源所组成;进程在运行过程中能够申请创建和使用系统资源(如独立的内存区域等),这些资源也会随着进程的终止而被销毁.而线程则是进程内的一个独立执行单元,在不同的线程之间是可以共享进程资源的,所以在多线程的情况下,需要特别注意对临界资源的访问控制.在系统创