• 用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

    多个客户端通信的效果:

    仅供大家参考一下。

     

     

  • 相关阅读:
    eclipse报错:发现了以元素 'd:skin' 开头的无效内容。此处不应含有子元素
    深入解析_Android的自定义布局
    RSA算法加密解密
    android版本
    TabHost+RadioGroup搭建基础布局
    android横竖屏控制
    一大波静态方法
    有时候
    简单的dialog菜单
    mongodb学习(三)——函数使用的小技巧
  • 原文地址:https://www.cnblogs.com/zhengao/p/7524515.html
Copyright © 2020-2023  润新知