服务端nodejs:/**
* Created by jhf on 14-10-13.
*/
var cons = new Array();
var userArray = new Array();
var WebSocketServer = require('ws').Server,
wss = new WebSocketServer({port:8080});
wss.on('connection',function(ws){
//从头中取出客户端标示userid,当然也可以得到客户端的ip地址
var userId = ws.upgradeReq.headers['userid'];
console.log('new connection successfully userId:'+userId);
cons.push(ws);
userArray.push(userId);
ws.on('message',function(message){
console.log(message);
for (var i=0; i<cons.length;i++) {
//判断userid是否为toUserId(发给指定的客户端)
var msgObj = JSON.parse(message);
if (userArray[i] == msgObj.toUserId) {
cons[i].send(message);
break;
}
}
});
ws.on('close',function(){
for (var i=0;i<cons.length;i++){
if (cons[i]==ws)cons.splice(i,1);
}
});
});
console.log('websocket-server running...');
客户端nodejs:
/**
* Created by jhf on 14-10-13.
*/
var WebSocket = require('ws')
,Options = require('options');
var options = new Options({"headers":{}});
options = {
"headers":{"userid":"abc"}
};
var ws = new WebSocket('ws://127.0.0.1:8080',options);
ws.on('open',function(ss){
var obj = {
"toUserIconUrl": "/api/getPicture/53c9e22cce37989659b24852",
"toUserName": "Fred",
"toUserId": "54237cb58c29a38f44362082",
"content": "测试消息",
"fromUserIconUrl": "/api/getPicture/53c0b7337a4dd8f77549838e",
"fromUserName": "Jin",
"fromUserId": "538aacd78016832f19000062",
"contentType": "text",
"time": (new Date()).getTime()
};
var str = JSON.stringify(obj);
console.log(str);
ws.send(str);
});
ws.on('message',function(message){
console.log('received: %s',message);
});
基本原理:
1,客户端连接到服务端的时候在header里面加入用户标示userid,用来判断哪个客户端连接到了服务端
2,服务端从header里面获取userid,在消息体中判断需要发送给哪个客户端(toUserId与header里面相等),将客户端发来的消息发送到指定客户端(网络上都是群发聊天室的例子居多,一对一聊天的很难找到)
另外,header中的id可以加密,消息内容也可以加密后发送,header是在websocket建立socket连接之前握手的时候指定的,一些加密的协议会在握手的时候进行处理,防止非法客户端连入服务端
分享到:
相关推荐
nodejs-websocket 即时通信 服务端 index.js是支持ws通信的代码(服务端代码),监听3000端口(此端口在客户端脚本要使用,可以用ip:3000访问) 客户端 index.html是聊天室的html静态页面 client.js是客户端连接ws...
2. **WebSocket协议**:为了实现即时通讯,麻将游戏通常会使用WebSocket协议。WebSocket提供双向通信,允许服务器主动向客户端推送数据,这对于实时性要求高的游戏来说至关重要。 3. **数据库集成**:游戏数据如...
服务器的实现很简单,先装一个nodeJs的模块,叫nodejs-websocket , 直接在nodeJs命令行中敲入:npm install nodejs-websocket回车就可以安装好了,然后就可以开始建立服务器了,因为有了nodejs-websocket模块,所以...
在Node.js环境中,我们可以利用WebSocket库(如ws或socket.io)来构建WebSocket服务端和客户端。例如,`server.js`可能就是实现WebSocket服务的Node.js脚本。服务端可以监听客户端的连接,接收并处理来自客户端的...
在上述示例中,服务端使用了`nodejs-websocket`模块创建WebSocket服务器。首先,通过`npm install nodejs-websocket`安装该模块。然后,通过`ws.createServer`创建WebSocket服务器,监听`8001`端口。当客户端连接时...
在本项目"以Nodejs为服务端并基于HTML5 canvas和mp4视频实现的真实交互弹幕.zip"中,我们探讨了如何使用现代Web技术构建一个交互式的弹幕系统。这个项目主要涉及三个核心技术:HTML5、JavaScript(特别是Node.js)...
本文将详细讲解如何利用Node.js结合WebSocket协议来构建一个名为HiChat的即时聊天程序。在深入技术细节之前,我们首先需要了解一些基础概念。 Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它使得...
使用Node.js可以方便地搭建WebSocket服务端。在Node.js中,可以利用`ws`模块来创建WebSocket服务器。例如,可以使用Node.js内置的`https`模块来提供SSL加密的WebSocket服务,利用Node.js的非阻塞I/O特性,能够高效率...
使用Socket.IO的好处在于它可以轻松实现即时通信功能,如多人在线游戏、聊天应用、实时数据更新等。在Unity中,你可以创建一个网络Manager类,管理与服务器的连接状态,以及处理收发的数据。例如,当玩家移动时,...
在Android应用中,Socket.IO可以方便地实现与Node.js服务器的双向即时通信。 5. **okhttp-ws-2.4.0.jar**: 这是OkHttp的WebSocket模块,用于支持WebSocket协议。WebSocket是一种在客户端和服务器之间建立长连接的...
《使用PostgreSQL、REST API与Websockets构建实时客户端通知服务器》 在当今互联网时代,实时数据更新和通知已经成为用户交互的重要部分。本文将详细介绍如何利用Node.js、PostgreSQL的Pub/Sub功能、RESTful API...
其中Tomcat-Websocket项目是基于tomcat服务器的java版服务端实现,Nodejs-Websocket项目是基于Nodejs的js版服务端实现。两个项目的服务端逻辑基本一致,客户端代码可以通用。此外,前者所有功能都基于websocket实现...
WebSocket库如ws或socket.io可以方便地在Node.js环境中实现WebSocket服务端。 3. 使用ws库创建WebSocket服务器: 在Node.js中,我们可以使用`ws`库来创建WebSocket服务器。首先,需要安装ws库:`npm install ws`。...
本文将深入探讨如何在Android客户端与Node.js服务端之间构建一套自有的即时通讯系统,无需依赖第三方库或服务。 首先,我们需要在服务端使用Node.js搭建实时通信的基础架构。Node.js基于Chrome V8引擎,运行...
在聊天应用中,socket.io负责在用户发送消息时即时传输数据到其他在线用户,实现消息的实时推送。 4. **实时通信**:实时通信是聊天应用的核心特性,它允许用户无需刷新页面就能看到新消息。Socket.io通过建立...
5. **WebSocket 支持**:Node.js 可以通过 ws 或 socket.io 库实现 WebSocket 协议,提供双向通信,使得游戏中的实时性得到保障,如玩家动作即时反馈、多人在线同步等。 6. **中间件框架**:Express.js 是 Node.js ...
3. Socket.IO的使用:理解WebSocket的工作原理,学会在客户端和服务端集成Socket.IO,实现事件监听和触发。 4. 实时通信:实现用户加入房间、发送和接收消息、显示新消息等功能。 5. 数据存储:可能涉及到如何存储和...
WS服务端.e (WS服务端源码)必须 e2eeTalkV2.exe (客户端成品例子)仅用于测试,如需改动,请修改客户端源码自行编译 node.dll (miniblink核心DLL) 必须 -------------------- ----- ----- ---- 出于...