RocketChat是一款优秀的开源聊天软件。支持各种平台,IOS、Android、Web、Mac、Windows以及Linux,安装部署简单,功能简单易用,目前部分功能还在完善当中,特别适合小公司自建聊天平台。项目开源地址 https://github.com/RocketChat,项目官方站点https://rocket.chat,这里将安装部署服务端的一些步骤分享给大家,希望对需要的小伙伴有所帮助。
View DetailsApache MINA(Multipurpose Infrastructure for NetworkApplications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO 技术的 TCP/UDP应用程序开发、串口通讯程序(只在最新的预览版中提供),MINA所支持的功能也在进一步的扩展中。
View Detailsopenfire是一个聊天服务端,好比qq服务端.本质是个socker server.
openfire通讯协议是 xmpp ,什么是xmpp参考百科 https://baike.baidu.com/item/XMPP/3430617?fr=aladdin
View DetailsEjabberd是一个用Erlang/OTP写的开源即时通讯服务器,其是跨平台、分布式、容错且基于开放标准的实时通讯系统。Ejabberd是一个功能丰富的XMPP服务器,同时适合小规模和超大估摸部署,无论是否需要可伸缩性。
View Details关于MQTT
MQTT是一个基于客户端-服务器的消息发布/订阅传输协议。MQTT协议是轻量、简单、开放和易于实现的,这些特点使它适用范围非常广泛。在很多情况下,包括受限的环境中,如:机器与机器(M2M)通信和物联网(IoT)。
软件安装
服务端:mosquitto
下载页面:https://mosquitto.org/download/
MQTTX
下载页面:https://mqttx.app/zh#download
MQTT.fx
下载链接:http://www.jensd.de/apps/mqttfx/1.7.1/mqttfx-1.7.1-windows-x64.exe
备份的蓝奏云下载链接:https://ioufev.lanzout.com/irlNC064nc4f
MQTT 是物联网(Internet of Things,IoT)的 OASIS 标准消息传递协议。它被设计为一个极其轻量级的发布/订阅消息传输,非常适合用较小的代码占用和最小的网络带宽连接远程设备。
View DetailsXMPP 是老牌的即时聊天协议,像 Google Hangouts, WhatsApp Messenger 等即时聊天程序都是基于 XMPP 的。
而 MQTT 是最近几年随着物联网行业的发展,才慢慢进入公众视线的,像 Facebook Messenger App 使用了 MQTT 协议。
MQTT 的特点在于报文小,协议简单,提供了三个 QoS 级别。这几个特性是专门为网络环境复杂的物联网(IoT)场景设计的。
XMPP 特点在于协议和扩展协议成熟,功能完善,专门为即时聊天(IM)场景设计。
本文涉及到一些 Java8 的特性。 int[]数组
1 |
int[] data = {4, 5, 3, 6, 2, 5, 1}; |
int[] 转 List<Integer>
1 |
List<Integer> list1 = Arrays.stream(data).boxed().collect(Collectors.toList()); |
Arrays.stream(arr) 可以替换成IntStream.of(arr)。 1.使用Arrays.stream将int[]转换成IntStream。 2.使用IntStream中的boxed()装箱。将IntStream转换成Stream<Integer>。 3.使用Stream的collect(),将Stream<T>转换成List<T>,因此正是List<Integer>。 int[] 转 Integer[]
1 |
Integer[] integers1 = Arrays.stream(data).boxed().toArray(Integer[]::new); |
前两步同上,此时是Stream<Integer>。 然后使用Stream的toArray,传入IntFunction<A[]> generator。 这样就可以返回Integer数组。 不然默认是Object[]。 List<Integer> 转 Integer[]
1 |
Integer[] integers2 = list1.toArray(new Integer[0]); |
调用toArray。传入参数T[] a。这种用法是目前推荐的。 List<String>转String[]也同理。 List<Integer> 转 int[]
1 |
int[] arr1 = list1.stream().mapToInt(Integer::valueOf).toArray(); |
想要转换成int[]类型,就得先转成IntStream。 这里就通过mapToInt()把Stream<Integer>调用Integer::valueOf来转成IntStream。 而IntStream中默认toArray()转成int[]。 Integer[] 转 int[]
1 |
int[] arr2 = Arrays.stream(integers1).mapToInt(Integer::valueOf).toArray(); |
思路同上。先将Integer[]转成Stream<Integer>,再转成IntStream。 Integer[] 转 List<Integer>
1 |
List<Integer> list2 = Arrays.asList(integers1); |
最简单的方式。String[]转List<String>也同理。 String 同理
1 2 3 4 5 6 |
// 同理 String[] strings1 = {"a", "b", "c"}; // String[] 转 List<String> List<String> list3 = Arrays.asList(strings1); // List<String> 转 String[] String[] strings2 = list3.toArray(new String[0]); |
完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { int[] data = {4, 5, 3, 6, 2, 5, 1}; // int[] 转 List<Integer> List<Integer> list1 = Arrays.stream(data).boxed().collect(Collectors.toList()); // Arrays.stream(arr) 可以替换成IntStream.of(arr)。 // 1.使用Arrays.stream将int[]转换成IntStream。 // 2.使用IntStream中的boxed()装箱。将IntStream转换成Stream<Integer>。 // 3.使用Stream的collect(),将Stream<T>转换成List<T>,因此正是List<Integer>。 // int[] 转 Integer[] Integer[] integers1 = Arrays.stream(data).boxed().toArray(Integer[]::new); // 前两步同上,此时是Stream<Integer>。 // 然后使用Stream的toArray,传入IntFunction<A[]> generator。 // 这样就可以返回Integer数组。 // 不然默认是Object[]。 // List<Integer> 转 Integer[] Integer[] integers2 = list1.toArray(new Integer[0]); // 调用toArray。传入参数T[] a。这种用法是目前推荐的。 // List<String>转String[]也同理。 // List<Integer> 转 int[] int[] arr1 = list1.stream().mapToInt(Integer::valueOf).toArray(); // 想要转换成int[]类型,就得先转成IntStream。 // 这里就通过mapToInt()把Stream<Integer>调用Integer::valueOf来转成IntStream // 而IntStream中默认toArray()转成int[]。 // Integer[] 转 int[] int[] arr2 = Arrays.stream(integers1).mapToInt(Integer::valueOf).toArray(); // 思路同上。先将Integer[]转成Stream<Integer>,再转成IntStream。 // Integer[] 转 List<Integer> List<Integer> list2 = Arrays.asList(integers1); // 最简单的方式。String[]转List<String>也同理。 // 同理 String[] strings1 = {"a", "b", "c"}; // String[] 转 List<String> List<String> list3 = Arrays.asList(strings1); // List<String> 转 String[] String[] strings2 = list3.toArray(new String[0]); } } |
from:https://zhuanlan.zhihu.com/p/196698839
View Details