• 支持百万并发的Web端即时通讯方案


    Web端即时通讯技术因受限于浏览器的设计限制,一直以来实现起来并不容易,主流的Web端即时通讯方案大致有4种:传统Ajax短轮询、Comet技术、WebSocket技术、SSE(Server-sent Events)。

     

    以上4种即时通讯技术各有各的优势和限制,很难决定最佳实践,开发者选型时根据自已的应用场景、开发代价、技术水平等选择适合自已的才是明智选择。

    Comet技术简介

    以即时通信为代表的web应用程序对数据的Low Latency要求,传统的基于轮询的方式已经无法满足,而且也会带来不好的用户体验。于是一种基于http长连接的“服务器推”技术便被hack出来。这种技术被命名为Comet,这个术语由Dojo Toolkit 的项目主管Alex Russell在博文Comet: Low Latency Data for the Browser首次提出,并沿用下来。

    其实,服务器推很早就存在了,在经典的client/server模型中有广泛使用,只是浏览器太懒了,并没有对这种技术提供很好的支持。但是Ajax的出现使这种技术在浏览器上实现成为可能, google的gmail和gtalk的整合首先使用了这种技术。随着一些关键问题的解决(比如 IE 的加载显示问题),很快这种技术得到了认可,目前已经有很多成熟的开源Comet框架。

    以下是典型的Ajax和Comet数据传输方式的对比,区别简单明了。典型的Ajax通信方式也是http协议的经典使用方式,要想取得数据,必须首先发送请求。在Low Latency要求比较高的web应用中,只能增加服务器请求的频率。Comet则不同,客户端与服务器端保持一个长连接,只有客户端需要的数据更新时,服务器才主动将数据推送给客户端。

    关于iComet服务器

    iComet 是一个使用 C++ 语言开发的支持百万并发连接的 comet/push 服务器, 支持百万级并发连接, 内存占用少, 性能优越. 可用于移动 App 的 Push Server(消息推送服务器), 或者用于 Web Push(Web 服务器推). 用于 Web Push 时, 支持的浏览器和操作系统平台包括: Safari(iOS, Mac), Firefox/Chrome(Windows, Mac), IE6+。

    为何选择iComet

    对于开发者, 为了快速和方便的开发, 应该选择一个支持 Comet 技术的 Web 服务器和一套 JavaScript 库(当然iComet也有开源的Java和Android客户端库可用)。iComet 就是这样的一套解决方案。即时通讯聊天软件app开发可以加蔚可云的v:weikeyun24咨询​

     

    iComet 分布式部署思路

    iComet 本身没有分布式方面的工具。我可以说一个思路:


        部署多台 icomet-server 实例;
        用户调用 sign 申请通道时, 根据 uid 哈希到其中一台;
        当往用户推送消息时, 根据uid哈希推送到他所在的那一台icomet-server上。


    如果你可以开发, 那便写程序订阅 psub 接口, 在一个中心节点保存uid和icomet-server的对应关系(路由表)。

    如何支持百万并发连接 C1000K

    需要两个步骤:


        第一步: 操作系统要支持;
        第二步: 修改 icomet.conf,设置 max_channels: 1000000。

    Web端JavaScript调用方法

    1

    2

    3

    4

    5

    6

    7

    8

    9

    var comet = new iComet({

        channel: 'abc',

        signUrl: 'http://127.0.0.1:8000/sign',

        subUrl: 'http://127.0.0.1:8100/sub',

        callback: function(content){

            // on server push

            alert(content);

        }

    });

    Nginx + icomet


    You can integrate icomet with nginx. If you are running you website on port 80 with domain . That is you visit your website home page with this url:

    1

    http://www.test.com/


    Then you want to run icomet on the same server with port 80, for the concern of firewall issue. You can config nginx to pass request to icomet:

    1

    2

    3

    4

    5

    6

    7

    8

    location ~ ^/icomet/.* {

        rewrite ^/icomet/(.*) /$1 break;

        proxy_read_timeout 60;

        proxy_connect_timeout 60;

        proxy_buffering off;

        proxy_pass   [url=http://127.0.0.1:8100;]http://127.0.0.1:8100;[/url]

    }


    Then, this url is used to subscribe to icomet channel xxx:

    1

    http://www.test.com/icomet/sub?cname=xxx

  • 相关阅读:
    看5G时代,“一键喊话”的大喇叭如何奏响基层治理最强音
    007 OpenCV霍夫变换
    IntelliJ IDEA 下 JavaWeb 配置MySQL 连接
    redis之单线程的redis都有哪些阻塞点
    kafka基础(1):官网解读-INTRODUCTION
    Java项目:SSM医院分诊管理系统
    Java读和写文件
    Java类型转换、常用运算符
    Mac自带apache2搭建服务请求localhost报 403 Forbidden
    Vue3快速入门
  • 原文地址:https://blog.csdn.net/wecloud1314/article/details/126542330