Node中的Socket.IO 简单Demo及说明

注:下面Demo的Server和Client都是纯后端。 并没有web页面。

Server端代码:

var express = require(‘express‘);
var app = express();
var server = require(‘http‘).createServer(app);
var io = require(‘socket.io‘)(server);

//定义变量,用来存储socket。如果是多进程的话,那么socket可以考虑存入redis中
var socketList = {};
//客户端连接服务器socket成功时触发的事件;
io.sockets.on(‘connection‘, function (socket) {
    //连接成功时,告诉客户端连接成功;可以通过send来发送信息
    socket.send({status: 1});
    //socket失去连接时触发(包括关闭浏览器,主动断开,掉线等任何断开连接的情况)
    socket.on(‘disconnect‘, function () {
        console.log("client disconnect");
        //客户端失去
        for (var key in socketList) {
            delete socketList[key];
        }
    });
    //接收客户端send来的信息
    socket.on(‘message‘, function (data) {
        var areaid = data.areaid;
        //用来保存socket,键值为区域
        socketList[areaid] = socket;
    });
    //注意:这里是从客户端的角度来提交事件
    //socket.broadcast.to(‘my room‘).emit(‘event_name‘, data);
});

//测试。延迟5S等客户端连接上后发送广播
setTimeout(broadcast,5000);

function broadcast(){
    //发送广播测试,system为约定的广播事件
    io.sockets.emit(‘system‘,‘broadcast test‘);
    // 向another room广播一个事件,在此房间所有客户端都会收到消息
    //注意:这里是从服务器的角度来提交事件
    //io.sockets.in(‘another room‘).emit(‘event_name‘, data);
}
server.listen(3000);

客户端代码:

var express = require(‘express‘);
var app = express();
var server = require(‘http‘).createServer(app);
server.listen(3001);

//引用的应该是socket.io-client;
var io = require(‘socket.io-client‘);
//connect函数可以接受一个url参数,url可以socket服务的http完整地址,也可以是相对路径,如果省略则表示默认连接当前路径。
// 与服务端类似,客户端也需要注册相应的事件来捕获信息,不同的是客户端连接成功的事件是connect。
//如果要传参,写法为var socket = io.connect(‘/‘,{ _query:‘sid=123456‘}); 服务器端取参数为var sid =socket.request._query.sid;
var socket = io.connect(‘http://127.0.0.1:3000‘);
socket.on(‘connect‘, function () {
    console.log(‘connect successed‘);
});
//socket失去连接时触发(包括关闭浏览器,主动断开,掉线等任何断开连接的情况)
socket.on(‘disconnect‘,function(){
    console.log("server disconnect");
})
//接收服务器端send来的信息
socket.on(‘message‘, function (data) {
    //判断服务器发来状态是否成功
    if (data.status && data.status == 1) {
        //向服务器端发送信息,areaid(区域)为随意造的一个guid
        socket.send({areaid: ‘6676AE6E-2924-11E5-82B2-005056BBC258‘});
    }
});
//接收系统广播消息
socket.on(‘system‘,function(data){
    console.log(data);
})

Demo路径:https://github.com/shadow88sky/socketDemo/tree/master

时间: 2024-10-10 05:24:55

Node中的Socket.IO 简单Demo及说明的相关文章

node中的socket.io制作命名空间

如果开发者想在一个特定的应用程序中完全控制消息与事件的发送,只需要使用一个默认的"/"命名空间就足够了.但是如果开发者需要将应用程序作为第三方服务提供给其他应用程序,则需要为一个用于与客户端连接的socket端口定义一个独立的命名空间. io.of(namespace) 制作两个命名空间 chat和news然后在客户端相互发送信息. 1 var express=require("express"); 2 var http=require("http&quo

使用Node.js的socket.io模块开发实时web程序

首发:个人博客,更新&纠错&回复 今天的思维漫游如下:从.net的windows程序开发,摸到nodejs的桌面程序开发,又熟悉了一下nodejs,对“异步”的理解有了上上周对操作系统的学习而更能理解.然后发现了Node.js中的socket.io这个模块,又觉得跟前几天用.net做客户端的socket游戏了.技术世界,兜兜转转,相逢一笑,疑是故人. socket.io用来做实时web程序,解决之前的B/S程序只有无状态连接,特定需求还需要用长连接这种“奇技淫巧”的问题.当然,这是html

使用node.js和socket.io实现多人聊天室

刚学node.js,想着做点东西练练手.网上的东西多而杂,走了不少弯路,花了一天时间在调代码上.参考网上的一篇文章,重写了部分代码,原来的是基于基于node-websocket-server框架的,我没用框架,单单是socket.io. 一.基本功能 1.用户随意输入一个昵称即可登录2.登录成功后1) 对正在登录用户来说,罗列所有在线用户列表,罗列最近的历史聊天记录2) 对已登录的用户来说,通知有新用户进入房间,更新在线用户列表3.退出登录1)支持直接退出2) 当有用户退出,其他所有在线用户会收

Node.js学习(1):Node.js 和Socket.IO 实现chat

使用 Node.js 和 Socket.IO 构建简单的聊天程序 在node.js根目录下创建文件夹chat,里面添加两个文件:app.js和index.html app.js var fs = require('fs') , http = require('http') , socketio = require('socket.io'); var server = http.createServer(function(req, res) { res.writeHead(200, { 'Cont

C#中使用Socket实现简单Web服务器

原文地址:https://www.cnblogs.com/mq0036/p/6656888.html 最近有个web的小项目,但公司的电脑无法安装IIS,所以就想自己来实现个Web server服务器,原本想了下,也就是socket处理http请求,于是就在博客园中搜索了"socket实现web server",结果还真搜索到一些文章,于是从中找了几个做参考,如下: C#中使用Socket实现简单Web服务器 C#中使用Socket模拟请求Web服务器过程 C#中自己动手创建一个Web

Nodejs 中使用Socket.io

安装socket.io npm install socket.io 或者在package.json文件中添加socket.io的依赖包,然后npm install安装所需模块. 在Express http服务器中使用socket.io 在 bin/www 文件中添加: var io = require('socket.io'); var socket = io.listen(server); socket.on('connection', function(client) { console.l

[Node.js] 基于Socket.IO 的私聊

原文地址:http://www.moye.me/2015/01/02/node_socket-io/ 引子 最近听到这么一个问题:Socket.IO 怎么实现私聊?换个提法:怎么定位到人(端),或者说怎么标识到连接,而不是依赖每个连接的socket.id.好问题. 在 Socket.IO Real-Time Web Application Development的指引下,形成了如下思路: 服务端在每个用户初次进入系统时,产生session_id 服务端强制用户输入昵称,与session_id对应

node.js和socket.io纯js实现的即时通讯实例分享

在这个例子中,其实node.js并没有真正起到服务器的作用,因为我们这里可以直接运行client.html文件,而不用输入url请求,当 然,要想输入url请求页面内容还需要加入请求静态文件的代码.这个实例中node.js最重要的作用就是将服务端迁移到了js,实现了客户端和服务端语 言上的统一,我们只要在浏览器上同时运行两个client.html客户端页面,即可进行简单的即是通讯了,socket.io才是我们真正用来实现即时 通讯的消息的收发. var server = http.createS

node.js之socket.io模块

socket.io模块是一个基于Node.js的项目,其作用主要是将WebSocket协议应用到所有的浏览器.该模块主要应用于实时的长连接多请求项目中,例如在线联网游戏.实时聊天.实时股票查看.二维码扫描登录等.——Node.js开发实战详解 安装和配置的方法和一般的NPM模块安装配置一致: # npm install soctet.io 应该是因为我的本地服务器是win7操作系统,所以在安装的时候会有一堆错误提示,但是貌似不影响使用socket.io模块,没有太在意这个.不知道在linux上是