这里有新鲜出炉的 Node.js 教程,程序狗速度看过来!
Node.js 是一个基于 Chrome JavaScript 运行时建立的一个平台, 用来方便地搭建快速的 易于扩展的网络应用 · Node.js 借助事件驱动, 非阻塞 I/O 模型变得轻量和高效, 非常适合 运行在分布式设备 的 数据密集型 的实时应用
这篇文章主要介绍了 node 中 socket.io 的事件使用详解, 需要的朋友可以参考下
socket.io 类库不但可以相互发送消息, 而且还可以通过 socket 端口对象的 emit 方法互相发送事件.
emit 在之前的事件上说过现在一句话带过: emit 是用来手动触发事件的.
- socket.emit(event,data,function(data1,data2......){
- });
在使用 emit 方法发送事件时, 可以再另一端使用 socket 端口对象的 on 方法会 once 方法监听.
- socket.on(event,function(data,fn){
- });
- socket.once(event,function(data,fn){
- })
上面的回调函数中的参数 data: 对方发送的事件中携带的数据,
fn: 对方在发送事件时指定的 callback 回调函数.
案例 1: 当服务器和客户端连接后, 向客户端发送一个 news 事件, 事件中携带一个对象, 该对象的 hello 属性值为 "你好". 在接收到客户端发送 my other event 事件时, 在控制台中输出 "服务器端就收到数据"+ 客户端发送事件中携带的数据.
服务器端代码, server.js
- var http=require("http");
- var sio=require("socket.io");
- var fs=require("fs");
- var server=http.createServer(function (req,res) {
- res.writeHead(200,{"Content-type":"text/html"});
- res.end(fs.readFileSync("./index.html"));
- });
- server.listen(1337);
- var socket=sio.listen(server);
- socket.on("connection", function (socket) {
- socket.emit("news",{hello:"你好"});
- socket.on("my other event", function (data) {
- console.log("服务器端接受到信息%j",data);
- });
- });
客户端 index.html 代码:
- <!DOCTYPE html>
- <html>
- <head lang="en">
- <meta charset="UTF-8">
- <title>
- </title>
- <script src="/socket.io/socket.io.js">
- </script>
- <script>
- var socket = io.connect(); socket.on("news",
- function(data) { console.log(data.hello); socket.emit("my other event", {
- my: "data"
- });
- });
- </script>
- </head>
- <body>
- </body>
运行结果:、
可以发现一点: 执行总是在监听端, 而不是手动执行端.
案例 2: 在手动触发对方事件时, 指定回调函数.
当客户端和服务端连接后, 向客户端发送 setName 事件, 事件携带 "张三", 触发事件时, 指定一个回调函数, 该回调函数向控制台输出 2 个参数值.
- var http=require("http");
- var sio=require("socket.io");
- var fs=require("fs");
- var server=http.createServer(function (req,res) {
- res.writeHead(200,{"Content-type":"text/html"});
- res.end(fs.readFileSync("./index.html"));
- });
- server.listen(1337);
- var socket=sio.listen(server);
- socket.on("connection", function (socket) {
- socket.emit("setName","张三", function (data1,data2) {
- console.log(data1);
- console.log(data2);
- });
- });
- <!DOCTYPE html>
- <html>
- <head lang="en">
- <meta charset="UTF-8">
- <title>
- </title>
- <script src="/socket.io/socket.io.js">
- </script>
- <script>
- var socket = io.connect(); socket.on("setName",
- function(name, fn) { console.log(name); fn("李四", "王五");
- });
- </script>
- </head>
- <body>
- </body>
- </html>
执行结果:
回调函数实在触发端执行的.
来源: http://www.phperz.com/article/17/0426/273933.html