NodeJS + Socket.IO 最终版

服务器端

//socket.io
var app = require("express")();
var http = require("http").Server(app);
var io = require("socket.io")(http);

//couchbase
var couchbase = require("couchbase");
var cluster = new couchbase.Cluster("couchbase://ip");
var bucket = cluster.openBucket("name","pass");

var onlineUsers = {};
var onlineCount = 0;

io.on("connection" , function(socket){

	socket.on("login" , function(obj){
		socket.name = obj.userid;
		console.log(new Date() + " : 编号" + obj.userid + "员工已登录!");

		if(onlineUsers.hasOwnProperty(obj.userid)){
			delete onlineUsers[obj.userid];
			onlineCount --;
		}

		onlineUsers[obj.userid] = {‘userid‘:obj.userid,‘socket‘:socket};
		onlineCount ++;
	});

	socket.on("disconnect" , function(){
		if(onlineUsers.hasOwnProperty(socket.name)){
			var obj = {userid:socket.name};
			delete onlineUsers[socket.name];
			onlineCount --;

			console.log(new Date() + " : 编号" + obj.userid+‘已登出!‘);
		}
	});

});

setInterval(function(){
	bucket.getMulti([ "Document1" , "Document2" ], function(err, result) {
		if(err){
			console.log(new Date() + " : ERROR : " + err);
		}
		else
		{
			NodeEmit(result);
		}
	});		

} , 10 * 1000);

function NodeEmit(result){
	for(var user in onlineUsers){
			// Document1
			_Str_cmd1 = result["Document1"].value["content"][user];
			onlineUsers[user].socket.emit("cmd1" , _Str_cmd1);

			// Document2
			if(typeof(result["Document2"].value["content"][user]) != "undefined"){
				_Str_cmd2 = JSON.stringify(result["Document2"].value["content"][user]);
				onlineUsers[user].socket.emit("cmd2" , _Str_cmd2);
			}

		}
}

http.listen(8066 , function(){
	console.log("listening on *:8066");
});

  

客户端 JS

function GetNoticeTipCount() {
    if ($("#hfAdminID").val() != "") {
        var adminid = $("#hfAdminID").val();

        //连接
        var socket = io.connect("ws://ip:8066/", {
            ‘forceNew‘: true,
            ‘reconnect‘: true
        });
        socket.emit("login", { userid: adminid });
        InitNotice(socket);

        /*********************************/
		// 自动重连,记录状态
        socket.on(‘connect‘, function(data) {
            console.log(moment().format(‘HH:mm:ss‘) + " 已连接服务器");
			//重连成功后重新提交登录请求
            socket.emit("login", { userid: adminid });
        });
        socket.on(‘connect_failed‘, function(data) {
            console.log(moment().format(‘HH:mm:ss‘) + " 连接失败");
        });
        socket.on(‘error‘, function(data) {
            console.log(moment().format(‘HH:mm:ss‘) + " ERROR");
        });
        socket.on(‘reconnecting‘, function (data) {
            console.log(moment().format(‘HH:mm:ss‘) + " 重连服务器中");
        });
        socket.on(‘reconnect‘, function (data) {
            console.log(moment().format(‘HH:mm:ss‘) + " 重连服务器成功");
        });
        socket.on(‘disconnect‘, function (data) {
            console.log(moment().format(‘HH:mm:ss‘) + " 连接断开");
        });  

        /***********************************/

    }
}

//初始化提醒
function InitNotice(socket) {
    socket.on("cmd1", function (_notices) {
        console.log(moment().format(‘HH:mm:ss‘) + " " + _notices);
		//其他操作
    });

    socket.on("cmd2", function (_cnc) {
        console.log(moment().format(‘HH:mm:ss‘) + " " + _cnc);
		//其他操作
    });
}

  

时间: 2024-10-29 04:33:59

NodeJS + Socket.IO 最终版的相关文章

nodejs socket.io

今天练习使用nodejs socket.io实现聊天室功能 已经做到功能: 1.自己发送信息在聊天室里出现: 2.自己的信息显示"我:",其他人的信息显示其id: 3.进入退出聊天室会有系统提醒: 想做的功能: 1.根据id进行1对1的聊天: 2.创建组进行小范围讨论: 3.在bootstap里找个好看的prompt弹窗: 经验总结: 1.nodejs 中 express跟http的关系似乎像 jq和js一样,express可以替代http var express = require(

nodejs+socket.io聊天室

nodejs+socket.io 聊天室 Node.js v0.12.6 Socket.io v1.3.5 RequireJS v2.1.18 Materialize v0.97.0 聊天室演示地址 项目地址 版权声明:本文为博主原创文章,未经博主允许不得转载.

Node学习笔记(三):基于socket.io web版你画我猜(一)

经过惨淡的面试,也是知道了自己的不足,刚好最近在学习node,心中便有了做一个web版的你画我猜的想法 首先说下思路,在做准备工作的时候,有两个大概的思路: 1.规定一块div,捕捉鼠标事件,动态生成position absolute,长宽1px的红色小div,这样可以模拟出划线的轨迹,做一个long polling,不断获取DOM结构,推送到socket端口,然后再广播给所有客户端 2.利用canvas作图,将canvas的数据推送到socket端口,广播所有客户端 其实之所以有两种想法,无非

Socket.io的集群方案

介绍 Nodejs因其简单方便,在服务端应用市场也开始占有一席之地,其另外一个分支--socket.io(最后跟nodejs好像又要合并了),特别适合聊天室.白板(document collabration).在线实时计算.计数器等应用,如果要支持大容量应用,就需要使用集群技术了,下面逐一讨论常见的socket.io集群方案. 集群方案 在官网介绍的方案有使用ngix反向代理方案.这种方案比较简单不需要修改业务代码可以直接布署,通过iphash轮调算法保存用户分配到同一个进程. vi /etc/

使用socket.io+fs.watchFile实现浏览器上自动预览html

作为一个前端码农我三分之一的时间用来在f5上还乐此不彼,当然我也可以用runjs.cn之类的在线编辑器来及时预览我的页面,但在线编辑器的智能提示等功能远远没有本地编辑好用啊,有同学说了,我们可以用dw的代码/设计模式,但我不喜欢dw( 没有理由的不喜欢 O(∩_∩)O) 现在有一个问题是确定的我们要使用本地编辑器 vscode  sublime 什么的爱用什么用什么 ,那么怎么才能让浏览器自动刷新呢,最开始我想着人为模拟f5.但这有个坏处: 第一,我不会写浏览器插件啊 第二,是不是每个浏览器都要

NodeJS+Express+Socket.io的一个简单例子

初始化一个NodeJS web应用: 打开CMD窗口. 运行cmd:"mkdir myapp",新建一个文件夹,名为myapp. 运行cmd:"cd myapp",切换到文件夹myapp. 运行cmd:"npm init",创建文件package.json. 3.Express入门应用: 在上面的CMD窗口运行cmd:"npm install express --save", 安装"express" nod

nodejs 基于socket.io实现聊天室

由于之后要做的网页视频直播项目要用到socket.io模块,所以特地花时间研究了下,参照网上的代码做了些改进,自己写了个聊天室代码.不得不承认后端事实推送能力有点厉害,这是以前我用php一直苦恼的事情.下面简单介绍下我的项目,顺带讲解下nodejs. 事实上,在看别人写的代码之前,我一直不知道nodejs是干嘛的,直到真正接触到才明白这也可以算作是服务端代码,丰富的第三方库使其功能极其强大.它可以像golang的beego一样直接通过命令行开启服务器,不过要用到express模块.加载模块的方式

Nodejs npm安装socket.io报错解决办法

安装socket.io时,报错,提示需要安装Microsoft visual studio 2005 或 Net framework 2.0 sdk,没有找到vcbuild.exe,解决办法是安装 .NET Framework 2.0 Software Development Kit (SDK) http://www.microsoft.com/en-us/download/details.aspx?id=15354 并将 C:\Program Files\Microsoft Visual St

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