精华内容
下载资源
问答
  • 及时通讯

    2020-01-11 13:34:30
    自己使用即时通讯技术来搭建 引入第三方服务 自己写socket 离线推送 适用于APP IOS使用苹果的服务 APNS andrios 使用googleFCM服务 国内服务器 方案 HTTP/1.x 协议 轮询 comet **Websocket **协议 HTML5定义了...

    在线推送

    适用于APP 网页
    自己使用即时通讯技术来搭建
    引入第三方服务
    自己写socket

    离线推送

    适用于APP
    IOS使用苹果的服务 APNS
    andrios 使用googleFCM服务 国内服务器

    方案

    • HTTP/1.x 协议
    • 轮询
    • comet
    • **Websocket **协议
    • HTML5定义了Websocket协议
    • 是真正的长连接,来完成双方互传数据
    • Websocket是一种再单个TCP连接上进行全双工通信的协议,通信双方随时都可以向对方发送数据
    • Websocket的建立离不开进行第一次HTTP的请响应
    • HTTP/2 协议标准 离具体推广还有时间
    • 问题:
    • 如何兼容老浏览器和新浏览器
      • 老 -> 轮询
      • 新 -> websocket
    • Socket.io 框架工具 能够解决适配问题

    Scoket.Io

    Socket.IO 本是一个面向实时 web 应用的 JavaScript 库,现在已成为拥有众多语言支持的Web即时通讯应用的框架

    这个框架中同时提供了轮询和websocket的通讯开发支持, 只要编写一套前后端代码,可以适配任何浏览器

    Scoket.Io不等价于WebScoket, socketio再封装websocket协议实现的时候,对websocket协议做了调整,所以不再兼容原生的websocket,意味着前端与后端必须采用sicketio来实现才能完成即时通讯

    优点: 一次编写 适配任何情况

    缺点: 强制要求前后都安必须是socketio

    编写开发

    • 创建socketio服务器
      • 每一个进行即时通讯的客户端,对应的服务器都是一个独立的tcp连接, 长连接
      • 与web业务服务器融合(将socketio提供的即时通讯功能融合到flask或者django中)
      • 单独编写socketio服务器,独立于任何web框架程序
        • 多线程或多进程
        • 协程方式运行
    • 编写收发数据的处理方法
      • 消息数据
      • 对客户端与服务器互相发送的消息数据进行分类,叫做时间消息,每一个类别的消息都是一个事件
      • 接受事件消息数据
        • connect与客户端建立websocket连接 收到的事件消息
        • disconnect与客户端断开连接 收到的事件消息
        • 自定义的事件消息
      • 发送事件消息数据 sio.emit(事件类型, 消息数据内容, 接收人)
    from server import sio
    import time
    
    @sio.on('connect')
    def on_connect(sid, environ):
        """
        与客户端建立好连接后被执行
        :param sid: string sid是socketio为当前连接客户端生成的识别id
        :param environ: dict 在连接握手时客户端发送的握手数据(HTTP报文解析之后的字典)
        """
        # sio.emit(消息事件类型, 消息数据内容, 接收人)
    
        # 与前端约定好, 聊天的内容 数据格式
        data = {
            'msg': 'hello',
            'timestamp': round(time.time() * 1000)
        }
    
        # 与前端约定好,聊天的内容数据都定义为message类型
        sio.emit('message', data, room=sid)
        # sio.send(data, room=sid)
    
    
    @sio.on("message")
    def on_message(sid, data):
        """
        与前端约定好,前端发送的聊天数据事件类型也是message类型
          与前端约定好 前端发送的数据格式也是
          {
            "msg": xx,
            "timestamp": xxx
          }
        :return:
        """
        # 此处使用rpc调用聊天机器人子系统 获取聊天回复内容
    
        resp_data = {
            "msg": 'I have received your msg: {}'.format(data.get('msg')),
            "timestamp": round(time.time() * 1000)
        }
        # sio.emit('message', resp_data, room=sid)
        sio.send(resp_data, room=sid)
    
    
    
    
    
    展开全文
  • netty及时通讯通讯DEMO

    2018-07-04 11:36:27
    netty及时通讯通讯DEMO!!!!!!!!!!!!!!!
  • 及时通讯整合

    2014-06-19 19:39:11
    及时通讯整合
  • 及时通讯源码

    2016-05-16 17:14:10
    及时通讯源码 类似对讲机的功能,供大家学习参考
  • 及时通讯系统

    2012-10-10 14:30:14
    及时通讯系统
  • 环信及时通讯这些及时通讯的语音,图片这些文件是怎么发送的,api发送的过程只是文件路径,底层的看不到,那位大牛懂得
  • 及时通讯包—java—用于及时通讯开发,腾讯RTX接口
  • android及时通讯

    2015-05-26 11:30:26
    android与nodejs及时通讯,实现事件驱动,两者完美结合,不需要第三方,服务端和客户端自己控制
  • android 及时通讯

    2012-11-24 16:05:31
    android 及时通讯 已经能够很完美的运行了 。
  • C#及时通讯系统

    2017-09-15 10:25:57
    主要是通过signalr微软的开源组件,实现了及时通讯和消息提醒功能,里面有我数据库的一部分代码,可以注释掉(主要是保存消息用的)
  • 及时通讯 服务器和客户端及时通讯 服务器和客户端
  • 阿里百川IM及时通讯
  • C# 企业及时通讯系统

    2019-05-22 12:17:02
    C# 企业及时通讯系统,基于C#编程,程序员在编程的过程中可以参考学习使用,希望对IT程序员有用,此源码程序简单易懂、方便阅读,有很好的学习价值!
  • 安卓及时通讯课件

    2014-09-13 17:53:39
    安卓及时通讯课件 里面包括了详细的课件以及源码 欢迎大家学习
  • 企业及时通讯系统类似钉钉,是入门企业级通信开发很好的实例
  • 仿微信源码,及时通讯

    2016-05-10 23:16:51
    仿微信源码,高仿,及时通讯
  • 运行android及时通讯源码(记得插上耳塞)然后输入对方的IP地址 可以是局域网也可以是3G 对方的IP 地址需要让对方告诉你 这个是前提 因为没有使用数据库,端口不用换默认端口 内部配置的 输入好了IP 之后 就可以点住...
  • 环信及时通讯,前后端代码,demo。值得参考,适合新手,欢迎下载
  • IM融云及时通讯

    2018-07-22 19:40:02
    一、IM融云及时通讯主要应用在web端,APP移动端的及时通讯聊天,聊天类型有:单聊,聊天室,群聊,直播间聊天等等 今天主要讲web端单聊和聊天室的实现 实现步骤如下: 1.用户登录后获取token,这个指的是融云...

    https://developer.rongcloud.cn 详情见融云官网

    一、IM融云及时通讯主要应用在web端,APP移动端的及时通讯聊天,聊天类型有:单聊,聊天室,群聊,直播间聊天等等

    今天主要讲web端单聊和聊天室的实现


    实现步骤如下:

    1.用户登录后获取token,这个指的是融云token,需要appkey(注册融云的时候申请) ,App Secret

     

    获取token的接口

    URL:http://api.cn.ronghub.com/user/getToken.[format]  

    参数:

    userId String 用户 Id,支持大小写英文字母、数字、部分特殊符号 + | = - _ 的组合方式,最大长度 64 字节。是用户在 App 中的唯一标识码,必须保证在同一个 App 内不重复,重复的用户 Id 将被当作是同一用户。(必传)
    name String 用户名称,最大长度 128 字节。用来在 Push 推送时显示用户的名称。(必传)
    portraitUri String 用户头像 URI,最大长度 1024 字节。(必传)

    此时以获取与userId 绑定的token

    2.前端拿到token后,首先初始化融云客户端

    2.1需要引入融云js

    2.2初始化客户端

    RongIMLib.RongIMClient.init("appkey");

    2.3 拿到token,用客户端链接融云服务器

      var token = "mKmyKqTSf7aNDinwAFMnz7NXKILeV3X0+CCRBOxmtOApmvQjMathViWrePIfq0GuTu9jELQqsckv4AhfjCAKgQ==";
    
      RongIMClient.connect(token, {
            onSuccess: function(userId) {
              console.log("Connect successfully." + userId);
            },
            onTokenIncorrect: function() {
              console.log('token无效');
            },
            onError:function(errorCode){
                  var info = '';
                  switch (errorCode) {
                    case RongIMLib.ErrorCode.TIMEOUT:
                      info = '超时';
                      break;
                    case RongIMLib.ConnectionState.UNACCEPTABLE_PAROTOCOL_VERSION:
                      info = '不可接受的协议版本';
                      break;
                    case RongIMLib.ConnectionState.IDENTIFIER_REJECTED:
                      info = 'appkey不正确';
                      break;
                    case RongIMLib.ConnectionState.SERVER_UNAVAILABLE:
                      info = '服务器不可用';
                      break;
                  }
                  console.log(errorCode);
                }
          });

    2.4 设置监听状态

    // 设置连接监听状态 ( status 标识当前连接状态 )
     // 连接状态监听器
     RongIMClient.setConnectionStatusListener({
        onChanged: function (status) {
            switch (status) {
                case RongIMLib.ConnectionStatus.CONNECTED:
                    console.log('链接成功');
                    break;
                case RongIMLib.ConnectionStatus.CONNECTING:
                    console.log('正在链接');
                    break;
                case RongIMLib.ConnectionStatus.DISCONNECTED:
                    console.log('断开连接');
                    break;
                case RongIMLib.ConnectionStatus.KICKED_OFFLINE_BY_OTHER_CLIENT:
                    console.log('其他设备登录');
                    break;
                  case RongIMLib.ConnectionStatus.DOMAIN_INCORRECT:
                    console.log('域名不正确');
                    break;
                case RongIMLib.ConnectionStatus.NETWORK_UNAVAILABLE:
                  console.log('网络不可用');
                  break;
                }
        }});

    2.5设置消息监听器,监听收到的消息

     // 消息监听器
     RongIMClient.setOnReceiveMessageListener({
        // 接收到的消息
        onReceived: function (message) {
            // 判断消息类型
            switch(message.messageType){
                case RongIMClient.MessageType.TextMessage:
                    // message.content.content => 消息内容
                    break;
                case RongIMClient.MessageType.VoiceMessage:
                    // 对声音进行预加载                
                    // message.content.content 格式为 AMR 格式的 base64 码
                    break;
                case RongIMClient.MessageType.ImageMessage:
                   // message.content.content => 图片缩略图 base64。
                   // message.content.imageUri => 原图 URL。
                   break;
                case RongIMClient.MessageType.DiscussionNotificationMessage:
                   // message.content.extension => 讨论组中的人员。
                   break;
                case RongIMClient.MessageType.LocationMessage:
                   // message.content.latiude => 纬度。
                   // message.content.longitude => 经度。
                   // message.content.content => 位置图片 base64。
                   break;
                case RongIMClient.MessageType.RichContentMessage:
                   // message.content.content => 文本消息内容。
                   // message.content.imageUri => 图片 base64。
                   // message.content.url => 原图 URL。
                   break;
                case RongIMClient.MessageType.InformationNotificationMessage:
                    // do something...
                   break;
                case RongIMClient.MessageType.ContactNotificationMessage:
                    // do something...
                   break;
                case RongIMClient.MessageType.ProfileNotificationMessage:
                    // do something...
                   break;
                case RongIMClient.MessageType.CommandNotificationMessage:
                    // do something...
                   break;
                case RongIMClient.MessageType.CommandMessage:
                    // do something...
                   break;
                case RongIMClient.MessageType.UnknownMessage:
                    // do something...
                   break;
                default:
                    // do something...
            }
        }
    });

    2.6发送消息

     var msg = new RongIMLib.TextMessage({content:"hello RongCloud!",extra:"附加信息"});
     var conversationtype = RongIMLib.ConversationType.PRIVATE; // 单聊,其他会话选择相应的消息类型即可。
     var targetId = "xxx"; // 目标 Id  
     RongIMClient.getInstance().sendMessage(conversationtype, targetId, msg, {
                    onSuccess: function (message) {
                        //message 为发送的消息对象并且包含服务器返回的消息唯一Id和发送消息时间戳
                        console.log("Send successfully");
                    },
                    onError: function (errorCode,message) {
                        var info = '';
                        switch (errorCode) {
                            case RongIMLib.ErrorCode.TIMEOUT:
                                info = '超时';
                                break;
                            case RongIMLib.ErrorCode.UNKNOWN_ERROR:
                                info = '未知错误';
                                break;
                            case RongIMLib.ErrorCode.REJECTED_BY_BLACKLIST:
                                info = '在黑名单中,无法向对方发送消息';
                                break;
                            case RongIMLib.ErrorCode.NOT_IN_DISCUSSION:
                                info = '不在讨论组中';
                                break;
                            case RongIMLib.ErrorCode.NOT_IN_GROUP:
                                info = '不在群组中';
                                break;
                            case RongIMLib.ErrorCode.NOT_IN_CHATROOM:
                                info = '不在聊天室中';
                                break;
                            default :
                                info = x;
                                break;
                        }
                        console.log('发送失败:' + info);
                    }
                }
            );

    可以设置消息类型

    会话名称 会话类型枚举 ConversationType 对应的 targetId
    单聊 PRIVATE 用户的 Id(userId)
    群组 GROUP 群组的 Id(groupId)
    聊天室 CHATROOM 聊天室的 Id(chatroomId)
    客服 CUSTOMER_SERVICE 客服的 Id(customerServiceId)
    系统会话 SYSTEM 系统账户 Id。可以理解为 QQ 的 10000 号的角色
    应用公众服务 APP_PUBLIC_SERVICE 应用公众服务的 Id(publicServiceId)
    公众服务 PUBLIC_SERVICE 公众服务的 Id(publicServiceId)

    如果是聊天室,则消息类型为CHATROOM   targetId为 聊天室Id


    3.聊天室

    3.1创建聊天室

    可以在后端server创建聊天室

    URL:http://api.cn.ronghub.com/chatroom/create.[format]

    参数:

    id:聊天室Id  唯一标识

    name: 聊天室名称

    3.2 web端加入聊天室  可以在建立链接的成功的回调函数中执行加入聊天室的方法

    var chatRoomId = "xxxx"; // 聊天室 Id。
    var count = 10;// 拉取最近聊天最多 50 条。
    RongIMClient.getInstance().joinChatRoom(chatRoomId, count, {
      onSuccess: function() {
           // 加入聊天室成功。
      },
      onError: function(error) {
        // 加入聊天室失败
      }
    });

    如果此时聊天室id不存在,则会重新创建一个聊天室 

    发送聊天与上述方法相同,只是消息类型不同,targetId不同

    3.3退出聊天室

    var chatRoomId = "xxxx"; // 聊天室 Id。
    RongIMClient.getInstance().quitChatRoom(chatRoomId, {
      onSuccess: function() {
           // 退出聊天室成功。
      },
      onError: function(error) {
        // 退出聊天室失败。
      }
    });

    3.4获取聊天室信息

    var chatRoomId = "xxxx";// 聊天室 Id。
    var count = 10; // 获取聊天室人数 (范围 0-20 )
    var order = RongIMLib.GetChatRoomType.REVERSE;// 排序方式。
    RongIMClient.getInstance().getChatRoomInfo(chatRoomId, count, order, {
      onSuccess: function(chatRoom) {
           // chatRoom => 聊天室信息。
        // chatRoom.userInfos => 返回聊天室成员。
         // chatRoom.userTotalNums => 当前聊天室总人数。
      },
      onError: function(error) {
        // 获取聊天室信息失败。
      }
    });

    3.5获取云端历史消息

    //获取历史消息的起始位置
    var chatRoomId = 'xxxx';
    var timestamp = 0; // 获取历史消息起始时间(毫秒)
    RongIMClient.getInstance().setChatroomHisMessageTimestamp(chatRoomId, timestamp);
    
    
    
    
    var chatRoomId = 'xxxx';
    var count = 10; // 拉取的条数 count <= 200
    var order = 1;  // 1正序;0倒序
    RongIMClient.getInstance().getChatRoomHistoryMessages(chatRoomId, count, order, {
      onSuccess: function(list, hasMore) {
        // list => 消息数组
        // hasMore => 是否有更多的历史消息
      },
      onError: function(error) {
    
      }
    });

    3.6 服务端销毁聊天室

    URL:http://api.cn.ronghub.com/chatroom/destroy.[format]

    参数:

    名称 类型 说明
    chatroomId String 要销毁的聊天室 Id。(必传)

     

    补充内容:关于聊天的一些监听方法,如监听链接状态,建立链接,初始化客户端

                     如果链接状态不改变,则改方法的回调函数不执行

                     如果已经是链接状态,那么再次建立链接方法不执行

                     如果客户端已经存在,那么初始化客户端不能重新被初始化,需要先用disconnection()方法,断开客户端链接

                    js方法都是异步执行,需要有先后顺序,很多方法是在前一个方法执行过后的回调函数中执行

    展开全文
  • 及时通讯源代码

    2011-12-23 09:59:33
    主要是及时通讯源代码程序,主要功能有:单聊、群聊、传文件、截屏、和短信的集成等
  • 一款基于Socket通信的及时通讯聊天系统,功能包含:发帖(评论、喝彩、倒喝彩、分享)、聊天。服务器端数据库采用Sqlite(默认数据库存放在E盘根目录下)
  • C#项目之企业及时通讯系统(含源码)
  • 开源及时通讯

    2013-07-16 16:21:00
    开源及时通讯 Openfire 的安装和配置 1、 下载最新的openfire安装文件 官方下载站点:http://www.igniterealtime.org/downloads/index.jsp#openfire 下载地址: Exe:...

    Openfire 的安装和配置

    1、 下载最新的openfire安装文件

    官方下载站点:http://www.igniterealtime.org/downloads/index.jsp#openfire

    下载地址:

    Exe:http://www.igniterealtime.org/downloads/download-landing.jsp?file=openfire/openfire_3_7_1.exe

    ZIP: http://www.igniterealtime.org/downloads/download-landing.jsp?file=openfire/openfire_3_7_1.zip

    我使用的是zip解压版的安装文件。

    其中openfire是服务器,下面还有一个spark,这个是一个XMPP协议通信聊天的CS的IM软件,它可以通过openfire进行聊天对话。

     

    2、 下载完成后,如果你下载的是exe文件,执行你的安装文件,进行安装。这里我是zip的文件。解压后,复制openfire目录到C:\Program Files\目录下;一定要在C:\Program Files\目录下的;这样openfire就安装完成了。

     

    3、 下面我们启动openfire服务器,并配置它。在C:\Program Files\openfire\bin目录下有一个电灯泡的openfire.exe文件,双击执行,启动完成后可以看到

    image

    4、 点击Launch Admin按钮进入http://127.0.0.1:9090/setup/index.jsp页面,配置openfire服务器

     

    5、 选择语言 中文简体

    image

    点击continue进入

     

    6、 配置服务器域名

    image

    如果你是本地访问,那么你可以不修改或是使用localhost、127.0.0.1的方式

    如果你用于外网或局域网访问,那么你的地址配置成外网或局域网地址

     

    7、 选择数据库

    image

    选择openfire自带的,当然你也可以选择你的数据库类型。如Oracle、SQLServer、MySQL等。如果openfire没有带 jdbc的连接驱动,你需要添加连接数据库的jdbc驱动;驱动放在C:\Program Files\openfire\lib目录下

     

    8、 选择特性配置,默认即可

    image

     

    9、 管理员邮件,可以跳过这步

    image

     

    10、 安装完成

    image

    进入管理员控制台页面

     

    11、 进入http://127.0.0.1:9090/login.jsp页面后,输入admin、密码admin登陆进入

    image

     

    12、 进入后可以看到

    image

    服务器名称就是jwchat的连接地址;你可以使用Spark、jwchat链接这个地址进行IM通信聊天……

    至此,openfire的安装和配置已经完成。下一篇文章开始完成jwchat的安装和配置。

    如果你需要更换服务器名称ip,请看下一篇文章

    posted on 2013-07-16 16:21 秦瑞It行程实录 阅读(...) 评论(...) 编辑 收藏

    转载于:https://www.cnblogs.com/ruiy/p/communition.html

    展开全文
  • 很好用的android及时通讯源码:实时对讲机程序,采用android技术实现。
  • 基于野狗的及时通讯

    2016-06-19 18:30:26
    android基于野狗的及时通讯

    基于野狗的及时通讯

    野狗

    github

    数据结构

    新建用户

    实现的很简单

    查找在user下有没有该用户,如果有就登录,没有就利用push() 创建

    添加好友

    根据输入的id查找,如果有就在双方的friend列表下添加对方,否则不做处理

    及时通讯

    进入通讯页面后添加如下监听, 当消息列表更新后更新页面

    mRef.child(mId).child(mFriendId).addValueEventListener(new ValueEventListener() {
    
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
    
                    if (dataSnapshot.getValue() == null) {
    
                        return;
                    }
                    Map<String, String> map = (Map<String, String>) dataSnapshot.getValue();
                    mChatMap.putAll(map);
                    mChatList.clear();
                    mChatList.addAll(mChatMap.values());
                    mView.notifyDataChanged();
                }
    
                @Override
                public void onCancelled(WilddogError wilddogError) {
    
                }
            });

    发送消息,在自己的消息列表下添加后缀为 :send 的消息,在对方消息列表下添加:receive后缀

    public void sendMessage(final String message) {
    
            final String time = System.currentTimeMillis() + "";
            mChatMap.put(time, message+":send");
    
            mRef.child(mId).child(mFriendId).setValue(mChatMap);
            mRef.child(mFriendId).child(mId).addListenerForSingleValueEvent(new ValueEventListener() {
    
                @Override
                public void onDataChange(DataSnapshot dataSnapshot) {
    
                    Map<String, String> s = (Map<String, String>) dataSnapshot.getValue();
                    if (s == null) {
    
                        s = new HashMap<String, String>();
                    }
                    s.put(time, message+":receive");
                    mRef.child(mFriendId).child(mId).setValue(s);
                }
    
                @Override
                public void onCancelled(WilddogError wilddogError) {
    
                }
            });
        }

    整个工程实现的很简单,界面就用了一个列表来显示,

    用到的开源库

    ButterKnife

    展开全文
  • 基于WCF的及时通讯

    2009-12-04 13:15:00
    基于WCF的及时通讯,主要采用WCF的双工通讯,实现及时消息,同时采用文件传输服务于消息服务进行隔绝;进程间通讯采用了Socket
  • 及时通讯的原理是什么?有有源码吗?我想看下学习一下,对不起,不想做伸手党,但是真的不太懂
  • tp5集成workerman中的getwayworker网页版及时通讯聊天系统,想学习tp5和workerman初学者们的首选
  • mqtt及时通讯

    2015-09-16 14:46:01
    关于mqtt即时通讯小demo。有需要的朋友可以下载看一下

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,993
精华内容 797
关键字:

及时通讯