zoukankan      html  css  js  c++  java
  • 使用node.js和socket.io实现多人聊天室

    刚学node.js,想着做点东西练练手。网上的东西多而杂,走了不少弯路,花了一天时间在调代码上。参考网上的一篇文章,重写了部分代码,原来的是基于基于node-websocket-server框架的,我没用框架,单单是socket.io。

    一、基本功能

    1、用户随意输入一个昵称即可登录
    2、登录成功后
    1) 对正在登录用户来说,罗列所有在线用户列表,罗列最近的历史聊天记录
    2) 对已登录的用户来说,通知有新用户进入房间,更新在线用户列表
    3、退出登录
    1)支持直接退出
    2) 当有用户退出,其他所有在线用户会收到信息,通知又用户退出房间,同时更新在线用户列表
    4、聊天
    1) 聊天就是广播,把信息广播给所有连接在线的用户
    5、一些出错处理
    1) 暂时简单处理了系统逻辑错误、网络出错等特殊情况的出错提示

    问题:功能不完善,有bug(退出后,新用户重新登录,还是原来的用户) 。抽空完善吧

    二、技术介绍

    socket.io(官网:http://socket.io/)是一个跨平台,多种连接方式自动切换,做即时通讯方面的开发很方便,而且能和expressjs提供的传统请求方式很好的结合,即可以在同一个域名,同一个端口提供两种连接方式:request/response, websocket(flashsocket,ajax…)。

    这篇文章对socket.io的使用做了详细介绍:http://www.cnblogs.com/dxy1982/archive/2012/01/30/2328020.html

    《用node.js和Websocket做个多人聊天室吧》http://www.html5china.com/HTML5features/WebSocket/20111206_3096.html

    三、注意事项

    (1)客户端这样引用socket.io.js:

    <script src="/socket.io/socket.io.js"></script>

    可能会加载失败(我在这里耗了不少时间)

    可以改为:

    <script src="http://ip:port/socket.io/socket.io.js"></script>

    (对应服务器的ip地址和端口号,比如说localhost和80端口)

    (2)实现广播的时候,参考官网的写法,竟然不起作用,如:

    var io = require('socket.io').listen(80);
    
    io.sockets.on('connection', function (socket) {
      socket.broadcast.emit('user connected');
      socket.broadcast.json.send({ a: 'message' });
    });

    后来看了这个:http://stackoverflow.com/questions/7352164/update-all-clients-using-socket-io

    改为以下才起作用:

    io.sockets.emit('users_count', clients);

    四、效果图

    五、源码下载

      Nodejs多人聊天室

    ps:

    1、在命令行运行

    node main.js

    然后在浏览器中打开index.html,如果浏览器(ff、Chrome)不支持,请升级到支持WebSocket的版本.

    2、推荐node.js的IDE WebStorm

    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
    分享到: 更多
  • 相关阅读:
    CSAcademy Or Problem
    BZOJ 4516 [Sdoi2016] 生成魔咒
    SPOJ7258 SUBLEX
    SPOJ1812 LCS2
    SPOJ1811 LCS
    SPOJ8222 NSUBSTR
    洛谷3804 【模板】后缀自动机
    SPOJ287 NETADMIN
    SPOJ1693 COCONUTS
    BZOJ5329 SDOI2018 战略游戏
  • 原文地址:https://www.cnblogs.com/flyoung2008/p/2600132.html
Copyright © 2011-2022 走看看