zoukankan      html  css  js  c++  java
  • 用node.js创建一个聊天服务器

     

    1.node的安装,网上查看教程,很简单的。

    2.全部代码如下:

    //我们加载了 net 模块。这个模块包含了 Node 需要的所有 TCP 功能

    var net = require('net')
    var chatServer = net.createServer();
    clientList = [];
    // 链接事件在调用回调函数时,会传给我们新客户端所对应的TCP socket对象的引用。
    chatServer.on('connection', function(client) {
    //客户端的ip地址和客户端从服务器返回数据的TCP端口 9000
    client.name = client.remoteAddress + ':' + client.remotePort
    client.write('Hi ' + client.name + '! ');
    clientList.push(client);
    // client.on事件监听器
    client.on('data', function(data) {
    broadcast(data, client);
    });
    // 问题:当一个客户端断开链接的时候,其他的客户端也会下线。
    // 当一个客户端断开连接时,把它从客户端的列表中移除。
    client.on('end', function() {
    // indexOf()找到客户端在队列中的位置
    // 下一个客户端再调用broadcast方法的时候,已经断开的客户端就不会出现在列表中
    clientList.splice(clientList.indexOf(client), 1);
    });
    // 错误记录
    client.on('error', function(e) {
    console.log(e);
    });
    });

    // 实现多个客户端链接到服务器,进行通信,添加到队列中。
    // 改进版
    function broadcast(message, client) {
    for (var i = 0; i < clientList.length; i += 1) {
    var cleanup = [];
    if (client !== clientList[i]) {
    // 把数据发送给客户端
    // 打印出发送者的名字和内容,进行区分。
    // 因为闭包绑定了每个client对象和相应的请求。
    // 检查socket是否可写
    if (clientList[i].writable) {
    clientList[i].write(client.name + " says " + message);
    } else {
    cleanup.push(clientList[i]);
    clientList[i].destroy();
    }
    }
    }
    // 在写入循环中删除死节点,清除索引垃圾
    for (var i = 0; i < cleanup.length; i += 1) {
    clientList.splice(clientList.indexOf(cleanup[i], 1));
    }
    };

    //端口号
    chatServer.listen(9000);
     
    3.命令行操作
    启动服务:

    多个客户端进行链接服务器:打开多了命令行窗口cmd;

    链接服务器:

    如果无法使用telnet不是内部或外部命令,百度可以解决,http://jingyan.baidu.com/article/7908e85c6ec355af491ad265.html

    多个客户端通信的效果:

    仅供大家参考一下。

     

     

  • 相关阅读:
    这个是我得标题:1548669163
    Mahout学习
    MySQL
    Ubuntu
    java小程序100例
    java实现链表从尾部输出
    空格替换
    java 实现二维数组查找
    JAVA实现分页
    java 程序参数详解
  • 原文地址:https://www.cnblogs.com/zhengao/p/7524515.html
Copyright © 2011-2022 走看看