即时通讯资料搜集

6人阅读 评论(0) 收藏 举报
分类:
用到的知识,socket.iosocket.io.java,webRTCwebRTCdemo
Android 基于Socket.io即时通讯IM实现,WebRTC实现视频通话
https://www.jianshu.com/p/cdb3b0301712
(node.js+socket.io+express)后台 + socket.io-client-java(android端) + socket.io-client-swift(ios端) 搭建全平台聊天系统

https://www.jianshu.com/p/594a7a01c925
socket.io的api,也就是engine.io

https://github.com/socketio/engine.iosocket.io 

读源码时,基本方法了解,socket.emit:向另一端发送消息,socket.on,接收另一端发来的消息。

参考:https://github.com/socketio/socket.io-client-java的demo

Usage

Socket.IO-client Java has almost the same api and features with the original JS client. You use IO#socket to initialize Socket:

socket = IO.socket("http://localhost");
socket.on(Socket.EVENT_CONNECT, new Emitter.Listener() {

  @Override
  public void call(Object... args) {
    socket.emit("foo", "hi");
    socket.disconnect();
  }

}).on("event", new Emitter.Listener() {

  @Override
  public void call(Object... args) {}

}).on(Socket.EVENT_DISCONNECT, new Emitter.Listener() {

  @Override
  public void call(Object... args) {}

});
socket.connect();

This Library uses org.json to parse and compose JSON strings:

// Sending an object
JSONObject obj = new JSONObject();
obj.put("hello", "server");
obj.put("binary", new byte[42]);
socket.emit("foo", obj);

// Receiving an object
socket.on("foo", new Emitter.Listener() {
  @Override
  public void call(Object... args) {
    JSONObject obj = (JSONObject)args[0];
  }
});

Options are supplied as follows:

IO.Options opts = new IO.Options();
opts.forceNew = true;
opts.reconnection = false;

socket = IO.socket("http://localhost", opts);

You can supply query parameters with the query option. NB: if you don't want to reuse a cached socket instance when the query parameter changes, you should use the forceNew option, the use case might be if your app allows for a user to logout, and a new user to login again:

IO.Options opts = new IO.Options();
opts.forceNew = true;
opts.query = "auth_token=" + authToken;
Socket socket = IO.socket("http://localhost", opts);

You can get a callback with Ack when the server received a message:

socket.emit("foo", "woot", new Ack() {
  @Override
  public void call(Object... args) {}
});

And vice versa:

// ack from client to server
socket.on("foo", new Emitter.Listener() {
  @Override
  public void call(Object... args) {
    Ack ack = (Ack) args[args.length - 1];
    ack.call();
  }
});

SSL (HTTPS, WSS) settings:

OkHttpClient okHttpClient = new OkHttpClient.Builder()
  .hostnameVerifier(myHostnameVerifier)
  .sslSocketFactory(mySSLContext.getSocketFactory(), myX509TrustManager)
  .build();

// default settings for all sockets
IO.setDefaultOkHttpWebSocketFactory(okHttpClient);
IO.setDefaultOkHttpCallFactory(okHttpClient);

// set as an option
opts = new IO.Options();
opts.callFactory = okHttpClient;
opts.webSocketFactory = okHttpClient;
socket = IO.socket("https://localhost", opts);

See the Javadoc for more details.

http://socketio.github.io/socket.io-client-java/apidocs/

Transports and HTTP Headers

You can access transports and their HTTP headers as follows.

// Called upon transport creation.
socket.io().on(Manager.EVENT_TRANSPORT, new Emitter.Listener() {
  @Override
  public void call(Object... args) {
    Transport transport = (Transport)args[0];

    transport.on(Transport.EVENT_REQUEST_HEADERS, new Emitter.Listener() {
      @Override
      public void call(Object... args) {
        @SuppressWarnings("unchecked")
        Map<String, List<String>> headers = (Map<String, List<String>>)args[0];
        // modify request headers
        headers.put("Cookie", Arrays.asList("foo=1;"));
      }
    });

    transport.on(Transport.EVENT_RESPONSE_HEADERS, new Emitter.Listener() {
      @Override
      public void call(Object... args) {
        @SuppressWarnings("unchecked")
        Map<String, List<String>> headers = (Map<String, List<String>>)args[0];
        // access response headers
        String cookie = headers.get("Set-Cookie").get(0);
      }
    });
  }
});


查看评论

自己收集的关于电脑的一些资料

  • 2009年08月12日 21:15
  • 51KB
  • 下载

琐碎资料收集整理

有时候,会在互联网上找到一些简短d
  • u010773619
  • u010773619
  • 2014-04-27 21:39:21
  • 384

聊天工具即时通讯

  • 2015年03月24日 21:15
  • 19.61MB
  • 下载

Python写的一个收集文件的小程序

import os import shutil import re class CollectFile: def __init__(self, source, dest, types, ex...
  • p1usJade
  • p1usJade
  • 2014-11-23 19:08:15
  • 488

收集遇到的问题

eclipse  快捷键无法格式化,可能原因 快捷键冲突 ,如输入法
  • eryhytkmgfhnghnjfghn
  • eryhytkmgfhnghnjfghn
  • 2015-05-10 16:39:39
  • 261

收集的程序化交易相关的资料

jemnbo 收集的程序化交易资料 在jemnbo 和讯的博客上看到一份程序化交易资料总结,觉得很有用。jemnbo 好像也是海洋的朋友,谢谢啦。 Archive of Papers B...
  • sijiangLu
  • sijiangLu
  • 2014-07-23 13:57:39
  • 1151

本人收集整理的创业相关的资料

  • 2009年04月27日 16:03
  • 16.12MB
  • 下载

Python的一些搜集内容

Python是一门跨平台的脚本语言,Python规定了一个Python语法规则,实现了Python语法的解释程序 就成为了Python的解释器。 Python支持几乎所有常用的操作系统。 ====...
  • thanklife
  • thanklife
  • 2017-02-20 09:49:34
  • 155

毕业设计时如何搜集相关资料等问题解答

   毕业设计时如何搜集相关资料等问题解答(陈晓炜早期文章)  做毕业设计时,大多数人都想趁这最后的机会好好学习一下,掌握一点实际的东西,或者为找工作做点准备等等之类的想法。可是在真正去做的时候却发现...
  • babyfacer
  • babyfacer
  • 2008-10-13 00:47:00
  • 1771

如何查找文献资料(收集整理)

诺贝尔学术资源网:http://bbs.ok6ok.com/index.php免费下载各种学科文献,是学术交流的理想园地 文献密码搜索的方法大全 一、文献密码搜索的方法概述 [font=宋体]Samp...
  • neuqhan
  • neuqhan
  • 2010-08-31 19:58:00
  • 4740
    个人资料
    持之以恒
    等级:
    访问量: 1653
    积分: 284
    排名: 27万+
    文章存档
    最新评论