将 iOS 和 Android 客户端连接到 SockJS 后端

2024-04-04

我正在使用开发 WebSocket 消息传递后端Spring WebSockets https://spring.io/guides/gs/messaging-stomp-websocket/,它使用SockJS + STOMP协议。之所以不使用普通的 WebSockets 是因为我需要利用 SockJS 在 Spring WebSockets 中提供的安全集成以及 SockJS 的其他简洁功能,例如房间、订阅等。我想知道这是否是一个不错的选择以便移动(iOS 和 Android)和 Web 客户端应用程序可以轻松连接到后端服务器并执行消息传递。如果是,那么我可以在 iOS 和 Android 上使用哪些库。

On SockJS GitHub 页面 https://github.com/sockjs/sockjs-client他们还列出了可用的客户端库,但没有列出 iOS 或 Android。所以,我想知道 SockJS 是否值得使用。

我发现对于 iOS 客户端Primus 对象 http://seegno.com/blog/2014/03/21/primus-objc-a-realtime-framework-agnostic-library-for-ios/ (GitHub 页面 https://github.com/seegno/primus-objc)图书馆声称他们可以连接到native WebSockets, Socket.IO, SockJS or perhaps engine.io.这是真的吗?如果这是真的,那么该库的质量又如何呢?

如果可以在背面使用 SockJS,那么是否也可以显示 iOS 和 Android 的示例代码,以便我可以在移动设备上执行概念验证?

如果 SockJS 对我来说不是一个好的选择,那么它会比使用 Socket.io + Node.js (使用 JavaScript)构建我的消息应用程序更好。在我看来,Socket.io 拥有 iOS 所需的所有客户端库(Socket.IO 的官方库 http://socket.io/blog/socket-io-on-ios/)和安卓(Socket.IO 的官方库 http://socket.io/blog/native-socket-io-and-android/).

另一种选择是使用Netty-Socket.io https://github.com/mrniko/netty-socketio库并手动构建每个端点,无需 Spring Framework(我正在考虑使用)的任何帮助,但我必须解决一个小挑战,那就是安全性。实际上已经有人尝试这样做了 https://stackoverflow.com/questions/31294883/netty-socketio-with-spring-security (同一个作者在官方 Netty-Socket.IO Github 页面上提出问题 https://github.com/mrniko/netty-socketio/issues/110)但看起来他还没有运气解决这个问题。


也许距离提出这个问题已有一年多了。但是,因为在 Google 搜索 SockJS+Android 时它得到了第一个结果。所以,我发布我的答案。

根据我最近从事的一个项目的经验,我们能够使用 STOMP 客户端 -就像这里的那个 https://github.com/NaikSoftware/StompProtocolAndroid- 从本机 Android 应用程序连接到 Spring Websocket 后端。

在浏览器中,您仍然可以使用 SockJS 客户端来获得跨浏览器对带有回退功能的 Websocket 的兼容性。

需要注意的是,当仅使用 STOMP 客户端连接到本机 websocket 时,URL 将类似于ws://mydomain/SockJSEndpoint/网络套接字, 当从浏览器使用 SockJS 客户端时,URL 将类似于http://mydomain/SockJSEndpoint。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 iOS 和 Android 客户端连接到 SockJS 后端 的相关文章

  • Lcom/google/firebase/FirebaseApp 类中没有虚拟方法 zzbqo()Z;或其超类(“com.google.firebase.FirebaseApp”的声明

    在我的 Android 应用程序中 编译应用程序时出现错误 我正在最新的 android studio 中工作 并使用 Firebase UI Auth 和 Firebase 数据库 所有版本在应用程序级等级文件中都相同 那么为什么我收到此
  • Android 拍摄后画质低

    我有一个触发图像捕获的按钮 private void capturePicture if ActivityCompat checkSelfPermission getContext Manifest permission CAMERA Pa
  • Java:字符串连接和变量替换的最佳实践[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 在 Java 中连接字符串和添加变量值的方法有太多 我应该如何选择一个 优点 缺点 最佳用例等 MessageFormat forma
  • 为并行的小型已知冻结进程创建匿名 AsyncTask 是一个好习惯吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 例如 您要做一些需要几秒钟的事情 并且不想冻结您的 UI 线程 对吗 您可以使用 AsyncTask 但您不想创建外部 或内部 类来解决小冻结问
  • 如何从代码中检测 Android 设备上的双核 cpu?

    我遇到了一个似乎仅影响双核的问题Android设备运行Android 2 3 姜饼 或更大 我想就这个问题进行一次对话 但仅限于符合该标准的用户 我知道如何检查OS级别 但还没有找到任何可以明确告诉我该设备正在使用多核的信息 有任何想法吗
  • IntelliJ IDEA:忽略代码覆盖率中的琐碎方法

    在 IntelliJ IDEA 15 0 2 中 如何在测试覆盖率测量期间忽略琐碎的 getter 和 setter 琐碎方法 should be measure public void complex fancy interesting
  • Android Studio 找不到 R.layout.simple_list_item_1 或任何其他默认布局 ID

    ID 之类的东西R layout simple list item 1不显示在 Android Studio 中的自动完成功能中 手动输入名称时也无法解析它们 我正在尝试使用 ArrayAdapter 并且我必须手动创建一个simple l
  • 多少次函数调用会导致堆栈溢出

    你好 Android Java 开发者 当一个函数调用一个函数并且该函数调用另一个函数等等时 有多少次调用 堆栈长度 会让我陷入堆栈溢出 有一般经验法则吗 我问的原因是因为我现在对于我的 5 人纸牌游戏来说哪个更有效 设计明智 解决方案一
  • CellTables 和 css (GWT)

    有人可以帮我设置 CellTable 行的背景吗 拜托 我整晚都在努力做这件事 但一直失败 这是 让我发疯 我尝试过调用setRowStyles 但是那个 似乎不起作用 我读到你无法更改 设置样式后 CellTable 的样式 作为默认样式
  • 无法使用 jolokia 从 Kafka 提取 JMX 数据

    我已经在 centos 7 机器上安装了 Jolokia 并尝试使用 Jolokia 代理提取 Kafka 指标 并使用 Nagios 插件 check jmx4perl 与 Icinga 监控工具集成 以下是我遵循的配置步骤 步骤1 下载
  • 在java中的super调用之前创建一个对象

    考虑到简单的java代码是行不通的 public class Bar extends AbstractBar private final Foo foo new Foo bar public Bar super foo 我需要在之前创建一个
  • 从流中过滤/删除无效的 xml 字符

    首先 我无法更改 xml 的输出 它是由第三方生成的 他们在 xml 中插入无效字符 我得到了 xml 字节流表示形式的 InputStream 除了将流消耗到字符串中并对其进行处理之外 是否有一种更干净的方法来过滤掉有问题的字符 我找到了
  • Android Wear Preview 未连接到 Wear Emulator

    我正在尝试为 Google Wear 设置开发环境并遵循 Google 的指示 http developer android com training wearables apps creating html但一旦我设置了端口转发 adb
  • Java 有现成的时钟同步解决方案吗?

    我们有一个大型的高性能软件系统 它由多个交互的 Java 进程 不是 EJB 组成 每个进程可以在同一台机器上 也可以在不同的机器上 某些事件在一个进程中生成 然后以不同的方式传播到其他进程以进行进一步处理等 出于基准测试的目的 我们需要创
  • 线程缓存和 Java 内存模型

    我正在尝试了解 Java 内存模型和线程 据我了解 每个线程都有 主 内存的本地副本 因此 如果一个线程尝试更改int变量 例如某个对象的变量 它会缓存int变量 如果它更改它 其他线程可能看不到更改 但是如果线程缓存一些对象而不是 int
  • 如何在松开按钮后立即看到新的视频层?

    我有一个应用程序 用户可以按住按钮来拍摄视频 然而 当他们这样做时 带有视频播放的新图层不会立即出现 相反 有一个非常短的延迟 在用户松开按钮后 您可以看到相机仍然显示相机所看到的内容 延迟结束后 视频立即显示并开始播放 但是 我怎样才能使
  • 如何在android中创建nanohttpd服务器?

    其实我也查过一些问题 然后去github上找了一下 但我是新来的 我无法理解这个例子 我想在android中创建http服务器 这样我就可以在PC浏览器中访问它 我有一个类扩展 nanohttpd 的实例 但服务器无法工作 不知道为什么 我
  • JFrame 类型的方法 ... 未定义

    我正在尝试制作一个带有两个菜单列表的 gui 每个菜单列表有 3 个项目 我的问题是 当我单击某个项目时 出现错误 JFrame 类型的方法 displayList int AirplaneList 未定义 AirplaneControll
  • JPanel 无法使用 setSize 和 setPreferedSize

    请解释为什么它不起作用 您也可以发布解决方案来解决此问题 非常感谢您提前 public class Run extends JFrame Fields static JPanel jpanel private int x y Constru
  • UILocalNotification 播放自定义声音

    我在我的应用程序中实现了本地通知 但我只是想知道是否有一种方法可以播放不属于 iPhone 应用程序主包的一部分的声音 基本上在我的应用程序中 我希望用户录制生成本地通知时播放的声音 而不是播放预先录制的或默认的声音 据我所知 这是可以实现

随机推荐

  • 检票口:带有 ListView 的 FileUploadField

    我有一个用于上传多个文件的页面 对于每个文件 用户必须指定类型和描述 这就是为什么我不能使用MultiFileUploadField 所以我用RepeatingView with a FileUploadField在每个元素以及我需要的其他
  • python scikit-learn 缺失数据聚类

    我想对缺少列的数据进行聚类 手动执行此操作 我将在没有此列的情况下计算缺少列的距离 使用 scikit learn 不可能出现丢失数据的情况 也没有机会指定用户距离函数 是否有机会对缺失数据进行聚类 示例数据 n samples 1500
  • 如何立即触发timer.Elapsed事件

    我正在使用System Timers Timer类来创建一个计时器Timer Elapsed事件 事情是Timer Elapsed仅在间隔时间过去后才会首次触发事件 有没有办法提高Timer Elapsed启动计时器后立即发生事件 我在中找
  • 有没有办法在 Jenkins 构建队列小部件中显示更多信息?

    在詹金斯状态页面上 我们有以下小部件 它显示 主 作业挂起 5 次 这是合理的 因为每次将代码审查推送到 Gerrit 时 它都会触发该分支上的这些更改的作业 如果我将鼠标悬停在这些 主 链接上 我可以看到环境中的许多有用信息 例如 GER
  • Android Oreo 位置通过 JobIntentService 在后台更新

    我曾经有AlarmManager WakefulBroadcastReceiver 服务做一些后台代码并获取位置更新 从奥利奥开始 这已被弃用 所以现在我使用AlarmManager BroadcastReceiver JobIntentS
  • main() 是 C 中的预定义函数吗? [复制]

    这个问题在这里已经有答案了 可能的重复 C C Java C 中的 main https stackoverflow com questions 1539385 main in c c java c 总的来说 我对编程很陌生 尤其是 C 我
  • 如何以编程方式调用 Maven 依赖插件

    我正在尝试以编程方式调用 maven dependency plugin 我正在使用 Maven 3 版本 问题是 当我通过pluginManager executeMojo session execution 调用它时 我收到以下错误消息
  • 使用 json.net 反序列化静态属性?

    大家好 我有一个如下所示的 JSON totals tokenType string tokenDenomination double count int IDCode string Key string 反序列化为对象的 C 代码是 in
  • 使用 WooCommerce 中的挂钩更新产品价格

    我正在尝试使用元键更新产品正常价格 regular price当产品在 wp admin 中更新时 使用整数或字符串 我想要的用户流程是 打开产品编辑页面 单击更新按钮 页面重新加载后 请看到 regular price 设置为 20 ad
  • 无法从 Windows 调试 Web 应用程序中的 iOS 问题?

    我在 iPad Pro 和 iPhone 7 Plus 上测试 Web 应用程序时发现了一些错误 我无法使用 Windows 或 Android 中的任何浏览器复制这些错误 并且找不到任何在 Windows 中远程调试 Safari 的方法
  • 如何迭代 C# 类查找特定类型的所有实例,然后在每个实例上调用方法

    是否可以 通过反射 迭代对象的所有字段 并在每个字段上调用一个方法 我有一堂课是这样的 public class Overlay public Control control1 public Control control2 我想要一个像这
  • 自动映射器表达式必须解析为顶级成员

    我正在使用自动映射器来映射源对象和目标对象 当我映射它们时 我收到以下错误 表达式必须解析为顶级成员 参数名称 lambda表达式 我无法解决这个问题 我的源对象和目标对象是 public partial class Source priv
  • C 删除文件最后 n 个字符

    我需要使用 C 代码从文件中删除最后 n 个字符 起初我尝试使用 b 但它返回了分段错误 我看到类似问题的有趣答案here https stackoverflow com questions 584639 truncate file and
  • 把按钮做成圆形

    我正在尝试在 150 210 的 x y 坐标处制作 JButton 圆 我希望按钮是大小为 40 40 的椭圆形 按钮的背景颜色为红色 它不需要文本 所以我应该得到一个我想要的任何大小的按钮 对吗 我正在使用面板 并将 setLayout
  • jQuery Mobile 通过 ajax 动态创建可折叠集不应用样式[重复]

    这个问题在这里已经有答案了 可能的重复 动态添加可折叠元素 https stackoverflow com questions 4214538 dynamically adding collapsible elements 我正在动态创建一
  • 为什么是“unsigned int ui = {-1};”缩小转换误差?

    标准第 8 5 4 7 解释了什么是缩小转换范围 is 缩小转换是隐式转换 从浮点类型到整数类型 或者 从 long double 到 double 或 float 或者从 double 到 float 除非源是常量 表达式与转换后的实际值
  • DatePicker Blackout日期所有未来和一些过去

    我有一个 WPF 应用程序 需要使用 DatePicker 提供出生日期 除了 134 年前以及之后的所有时间之外 我还想删除明天和其余时间的日期 我尝试使用 BlackoutDates 来完成此任务 因为我们仍然希望允许手动用户输入 但我
  • 使用 Curl 发布 xml 时权限被拒绝?

    我必须将 xml 发布到某个 url 以便由某些 Web 服务使用 我正在使用 Cent OS 5 6 Apache 2 2 3 CentOS 当我使用命令行发布时curl d abc xml http example com它给了我结果
  • 使用 appium 自动登录过程时,密码和用户名被输入在用户名的同一字段中

    尽管测试清晰简单 但我在尝试发送密钥 用户名 密码 时总是面临同样的问题 但密码字段是写在用户名的位置 这是我的测试 NG 我使用 appium 进行测试 Test public void Test1 throws InterruptedE
  • 将 iOS 和 Android 客户端连接到 SockJS 后端

    我正在使用开发 WebSocket 消息传递后端Spring WebSockets https spring io guides gs messaging stomp websocket 它使用SockJS STOMP协议 之所以不使用普通