`
21jhf
  • 浏览: 130518 次
  • 来自: ...
社区版块
存档分类
最新评论

使用Nodejs做websocket服务端与客户端实现即时聊天

阅读更多
服务端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:即时通信

    nodejs-websocket 即时通信 服务端 index.js是支持ws通信的代码(服务端代码),监听3000端口(此端口在客户端脚本要使用,可以用ip:3000访问) 客户端 index.html是聊天室的html静态页面 client.js是客户端连接ws...

    基于nodejs麻将服务端

    2. **WebSocket协议**:为了实现即时通讯,麻将游戏通常会使用WebSocket协议。WebSocket提供双向通信,允许服务器主动向客户端推送数据,这对于实时性要求高的游戏来说至关重要。 3. **数据库集成**:游戏数据如...

    NodeJs 实现简单WebSocket即时通讯的示例代码

    服务器的实现很简单,先装一个nodeJs的模块,叫nodejs-websocket , 直接在nodeJs命令行中敲入:npm install nodejs-websocket回车就可以安装好了,然后就可以开始建立服务器了,因为有了nodejs-websocket模块,所以...

    rtsp在线播放,websocket

    在Node.js环境中,我们可以利用WebSocket库(如ws或socket.io)来构建WebSocket服务端和客户端。例如,`server.js`可能就是实现WebSocket服务的Node.js脚本。服务端可以监听客户端的连接,接收并处理来自客户端的...

    基于html5和nodejs相结合实现websocket即使通讯

    在上述示例中,服务端使用了`nodejs-websocket`模块创建WebSocket服务器。首先,通过`npm install nodejs-websocket`安装该模块。然后,通过`ws.createServer`创建WebSocket服务器,监听`8001`端口。当客户端连接时...

    以Nodejs为服务端并基于HTML5 canvas和mp4视频实现的真实交互弹幕.zip

    在本项目"以Nodejs为服务端并基于HTML5 canvas和mp4视频实现的真实交互弹幕.zip"中,我们探讨了如何使用现代Web技术构建一个交互式的弹幕系统。这个项目主要涉及三个核心技术:HTML5、JavaScript(特别是Node.js)...

    基于Node.js + WebSocket打造即时聊天程序嗨聊

    本文将详细讲解如何利用Node.js结合WebSocket协议来构建一个名为HiChat的即时聊天程序。在深入技术细节之前,我们首先需要了解一些基础概念。 Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它使得...

    08-websocket.md

    使用Node.js可以方便地搭建WebSocket服务端。在Node.js中,可以利用`ws`模块来创建WebSocket服务器。例如,可以使用Node.js内置的`https`模块来提供SSL加密的WebSocket服务,利用Node.js的非阻塞I/O特性,能够高效率...

    socket.io客户端及服务端

    使用Socket.IO的好处在于它可以轻松实现即时通信功能,如多人在线游戏、聊天应用、实时数据更新等。在Unity中,你可以创建一个网络Manager类,管理与服务器的连接状态,以及处理收发的数据。例如,当玩家移动时,...

    Android使用的nodejs包

    在Android应用中,Socket.IO可以方便地实现与Node.js服务器的双向即时通信。 5. **okhttp-ws-2.4.0.jar**: 这是OkHttp的WebSocket模块,用于支持WebSocket协议。WebSocket是一种在客户端和服务器之间建立长连接的...

    changes-notifier:使用PostgreSQL PubSub,后端REST API和客户端Websocket的实时客户端的通知服务器

    《使用PostgreSQL、REST API与Websockets构建实时客户端通知服务器》 在当今互联网时代,实时数据更新和通知已经成为用户交互的重要部分。本文将详细介绍如何利用Node.js、PostgreSQL的Pub/Sub功能、RESTful API...

    在线视频网页源码

    其中Tomcat-Websocket项目是基于tomcat服务器的java版服务端实现,Nodejs-Websocket项目是基于Nodejs的js版服务端实现。两个项目的服务端逻辑基本一致,客户端代码可以通用。此外,前者所有功能都基于websocket实现...

    websocket-demo:基于WebSocket的聊天室应用

    WebSocket库如ws或socket.io可以方便地在Node.js环境中实现WebSocket服务端。 3. 使用ws库创建WebSocket服务器: 在Node.js中,我们可以使用`ws`库来创建WebSocket服务器。首先,需要安装ws库:`npm install ws`。...

    android及时通讯

    本文将深入探讨如何在Android客户端与Node.js服务端之间构建一套自有的即时通讯系统,无需依赖第三方库或服务。 首先,我们需要在服务端使用Node.js搭建实时通信的基础架构。Node.js基于Chrome V8引擎,运行...

    chat-app:使用 nodeJs 、 reactJs 和 socket.io 的基本聊天应用程序

    在聊天应用中,socket.io负责在用户发送消息时即时传输数据到其他在线用户,实现消息的实时推送。 4. **实时通信**:实时通信是聊天应用的核心特性,它允许用户无需刷新页面就能看到新消息。Socket.io通过建立...

    Nodejs作为游戏后端开发中级教程.rar

    5. **WebSocket 支持**:Node.js 可以通过 ws 或 socket.io 库实现 WebSocket 协议,提供双向通信,使得游戏中的实时性得到保障,如玩家动作即时反馈、多人在线同步等。 6. **中间件框架**:Express.js 是 Node.js ...

    chat-app-socket-io:使用reactjs,expressjs,nodejs,socket.io制作的实时聊天应用程序。 您可以输入自己选择创建的任何房间,并与该房间中的其他人进行实时互动

    3. Socket.IO的使用:理解WebSocket的工作原理,学会在客户端和服务端集成Socket.IO,实现事件监听和触发。 4. 实时通信:实现用户加入房间、发送和接收消息、显示新消息等功能。 5. 数据存储:可能涉及到如何存储和...

    E2EE+VUE+WS 实现聊天系统WEBUI 表情/图片/文字 MiniBlink 客户Duan-易语言

     WS服务端.e (WS服务端源码)必须  e2eeTalkV2.exe (客户端成品例子)仅用于测试,如需改动,请修改客户端源码自行编译  node.dll (miniblink核心DLL) 必须 -------------------- ----- ----- ---- 出于...

Global site tag (gtag.js) - Google Analytics