WebSocket+node.js创建即时通信的Web聊天服务器

前端之家收集整理的这篇文章主要介绍了WebSocket+node.js创建即时通信的Web聊天服务器前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

本文实例node.js创建即时通信的Web聊天服务器,供大家参考,具体内容如下

1.使用nodejs-websocket

nodejs-websocket是基于node.js编写的一个后端实现websocket协议的库, 连接:(1)安装 在项目目录下通过npm安装:npm install nodejs-websocket

(2)创建服务器

调用createServer方法创建服务器,回调函数中的conn是connection的实例 var server = ws.create(function(conn){ console.log(“New connection”); //监听text事件,text事件每当从服务器收到文本类型数据时触发,回调函数的参数为传过来的字符串 conn.on(“text”,function(str){ console.log(“Received ” + str); }); //监听close事件,每次断开连接时触发 conn.on(“close”,function(code,reason){ console.log(“Connection closed”); }) }).listen(8888);

2.客户端使用websocket

在客户端首先需要实例化一个websocket对象:ws = new WebSocket("ws://localhost:5000");其中的参数传入格式为ws://+url,这就和http协议前缀http://一样。接下来就可以通过websocket内置的一些方法进行事件监听和数据展示。 这里统一介绍各个监听事件:onopen当服务器和客户端建立起连接时触发;onmessage当客户端收到服务器发送的数据时触发; onclose当客户端和服务器的连接关闭时触发;onerror当连接出现错误时触发。

3.使用websocket+nodejs实现在线聊天室

(1)html和css代码省略 (2)客户端js:

"; } ws.onclose=function(){ oUl.innerHTML+="
  • 客户端已断开连接
  • "; }; ws.onerror=function(evt){ oUl.innerHTML+="
  • "+evt.data+"
  • ";
    };

    };
    oSend.onclick=function(){
    if(ws){
    ws.send(oInput.value);
    }
    }(3)服务器端js:
    /
    websocket支持两种类型的数据传输:text类型和binary类型,其中二进制数据是通过流的模式发送和读取的
    /
    var app=require('http').createServer(handler); //为了简化代码,将服务器创建具体代码放到handler函数
    var ws=require('nodejs-websocket');
    var fs=require('fs');
    app.listen(8888);
    function handler(req,res){
    //dirname返回该文件所在的当前目录。调用readFile方法进行文件读取
    fs.readFile(
    dirname+'/index.html',function(err,data){
    if(err){
    res.writeHead(500);
    return res.end('error ');
    }
    res.writeHead(200);
    res.end(data);
    });
    }
    //以上步骤成功在8888端口渲染出相应的html界面
    //conn是对应的connection的实例
    var server = ws.createServer(function(conn){
    console.log('new conneciton');
    //监听text事件,每当收到文本时触发
    conn.on("text",function(str){
    broadcast(server,str);
    });
    //当任何一端关闭连接时触发,这里就是在控制台输出connection closed
    conn.on("close",reason){
    console.log('connection closed');
    })
    }).listen(5000);
    //注意这里的listen监听是刚才开通的那个服务器的端口,客户端将消息发送到这里处理

    function broadcast(server,msg) {
    //server.connections是一个数组,包含所有连接进来的客户端
    server.connections.forEach(function (conn) {
    //connection.sendText方法可以发送指定的内容到客户端,传入一个字符串
    //这里为遍历每一个客户端为其发送内容
    conn.sendText(msg);
    })
    }

    以上就是本文

    的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程之家。

    猜你在找的Node.js相关文章