移动客户端/服务器应用程序中基于 Socket 与基于 HTTP 的通信

2024-02-17

我最近决定承担一个相当大的软件工程项目,其中涉及开发基于客户端-服务器的应用程序。我的计划是开发尽可能多的客户端:包括原生 iPhone、Android 和 Blackberry 应用程序以及基于 Web 的应用程序。

对于我的服务器,我计划使用 VPS(可能来自 slicehost.com),运行带有 MySQL 数据库的 Linux 风格。我的第一个问题是客户端与服务器交互的策略应该是什么。我的想法是:

  1. 与 PHP 脚本进行基于 HTTP-POST 或 GET 的通信。
    这是我非常熟悉的事情 - 将信息从表单传递到 PHP 脚本,使用它并返回输出。我假设我希望将输出作为某种基于 XML 或 JSON 的字符串返回给客户端。我还假设我想为想要与我的服务器交互的客户端创建一个定义良好的 API。

  2. 与 PHP 脚本、Java 程序或 C++ 程序进行基于套接字的通信
    这个我不太熟悉。我已经学习了有关创建脚本或简单应用程序的基本教程,这些脚本或简单应用程序创建套接字、侦听连接并返回数据。我假设此方法的通信数据开销比基于 HTTP 的方法少得多。我的梦想是有很多并发客户端在使用,所有客户端都与服务器/数据库一起工作。我不确定基于简单 HTTP/PHP 脚本的通信设计是否可以有效扩展以满足许多客户的需求。另外,我最终可能希望能够通过各种服务器事件触发客户端的服务器推送功能。我也不确定哪种编程语言最适合这个。如果效率是一个大问题,我想 PHP 脚本可能不够高效?

有没有一种普遍接受的方法来做到这一点?对我来说,这是弥补我目前的一些技能之间差距的尝试。我在 PHP 以及与 MySQl 数据库接口来提供动态网页方面拥有丰富的经验。我在开发本机 iPhone 应用程序方面也有很多经验(但是没有任何一个应用程序具有任何重要的基于服务器的通信)。我还使用过 Java/C++,并用这两种语言开发了与 MySQL 交互的应用程序。

我预计我的客户不会向服务器发送/接收大量数据。相当于每个给定客户端事件的一组字符串。

另一个问题:使用 VPS - 好主意吗?我显然不想支付完全专用的服务器费用(slicehost 提供的 VPS 起价约为 20 美元/月),并且我假设 VPS 将能够满足一些初始客户的要求。随着越来越多的用户开始与我的服务器交互,我假设可以迁移到越来越大的“切片”,并可能在必要时最终迁移到完全专用的服务器。

感谢您的建议! :)


我建议选择简单的 HTTP,至少在您的需求超出其功能之前是这样。 (您的应用程序需要的状态越多,适合的 HTTP 就越少)。

为了实现低成本和可扩展性,使用 Rackspace 或 Amazon 等云可能不会出错。但我才刚刚开始使用这些,到目前为止我的服务器一直是 tektonic 的 VPS。

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

移动客户端/服务器应用程序中基于 Socket 与基于 HTTP 的通信 的相关文章

  • 在 Android 4.2.2 和 4.3 上关闭 BluetoothSocket 时出现致命信号 11 SIGSEGV

    我的应用程序在 Android 2 3 3 到 4 1 2 下运行良好 但自从 Android 4 2 2 和 Android 4 3 以来 我有一个 fatal signal 11 SIGSEGV at 0x00 当我关闭蓝牙插座时 我查
  • Rails 是否支持侦听 UDP 套接字的简洁方式?

    在 Rails 中 集成更新模型某些元素的 UDP 侦听过程的最佳方式是什么 特别是向其中一个表添加行 简单的答案似乎是在同一进程中使用 UDP 套接字对象启动一个线程 但不清楚我应该在哪里执行适合 Rails 方式的操作 有没有一种巧妙的
  • Java心跳设计

    我需要在我的 Java 项目上实现一个心跳系统 3 5 个客户端和 1 个服务器 但我有一些问题 1 客户端需要有 2 个套接字吗 1 用于心跳 1 用于接收我的软件的正常消息 2 我看到在特定情况下 当客户端滞后时 客户端不会收到消息 如
  • php中的可变长度数据包

    我正在接收通过 UDP 发送到我的服务器的数据包 我正在使用 socket read 来读取数据 它运行得很好 但是我遇到了一个错误 在我的例子中 socket read 的长度参数并不总是相同的 数据长度的范围可以是 50 150 字节
  • 套接字发送并发保证

    如果我在两个进程 或两个线程 之间共享一个套接字 并且在这两个进程中我尝试发送一条阻塞的大消息 大于下划线协议缓冲区 是否可以保证这两个消息将按顺序发送 或者消息可以在内核内部交错吗 我主要对 TCP over IP 行为感兴趣 但了解它是
  • 高性能 C# 服务器套接字的提示/技术

    我有一个 NET 2 0 服务器似乎遇到了扩展问题 可能是由于套接字处理代码的设计不佳 我正在寻找有关如何重新设计它以提高性能的指导 使用场景 50 150 个客户端 每个客户端以高速率 高达 100 秒 秒 发送小消息 每条 10 字节
  • Android Socket + ObjectOutputStream 无法正常工作

    我正在开发一个客户端 服务器程序 其中客户端是 Android 设备 服务器有一个从输入流读取对象的侦听器类 我为另一台计算机创建了一个客户端软件 该软件通过本地网络发送一个小对象 计算机到计算机工作得很好 我读取了该对象并打印了内容 但是
  • Socket.IO 消息不更新 Angular 变量

    我有一个 socket io 客户端 服务器设置 并在客户端上运行 AngularJS Server js var io require socket io server io on connection function socket s
  • 如何在S3中存储数据并允许用户使用rails API / iOS客户端以安全的方式访问?

    我是编写 Rails 和 API 的新手 我需要一些有关 S3 存储解决方案的帮助 这是我的问题 我正在为 iOS 应用程序编写一个 API 用户在 iOS 上使用 Facebook API 登录 服务器根据 Facebook 向 iOS
  • recvfrom() 中的 addrlen 字段有何用途?

    我在程序中使用 recvfrom 从我在 src addr 中指定的服务器获取 DGRAM 数据 但是 我不确定为什么需要初始化并传入addrlen 我读了手册页 但不太明白它的意思 如果src addr不为NULL 并且底层协议提供了源地
  • Rails 应用程序中的持久 TCP 连接

    我有一个在服务器上运行的第三方应用程序 它对客户端进行身份验证并返回响应 我的问题是 对于我收到 Rails 应用程序的每个请求 我都需要建立 TCP 连接并获取数据 是否可以有一个持久连接 以便我可以减少建立连接的开销 我希望你使用的是
  • 使用netcat将unix套接字传输到tcp套接字

    我正在尝试使用以下命令将 unix 套接字公开为 tcp 套接字 nc lkv 44444 nc Uv var run docker sock 当我尝试访问时localhost 44444 containers json从浏览器中 它不会加
  • Accept() 是线程安全的吗?

    我目前正在用 C 语言为我正在做的课程编写一个简单的网络服务器 我们的一项要求是实现一个线程池来使用 pthread 处理连接 我知道我将如何粗略地执行此操作 在主线程中调用accept并将文件描述符传递给freee线程 但是我的朋友建议了
  • 通过 SSLStream 发送数据时出现数据包碎片

    当使用 SSLStream 将 大 数据块 1 兆 发送到 已通过身份验证的 客户端时 我看到的数据包碎片 分解是FAR比使用普通 NetworkStream 时更大 在客户端上使用异步读取 即 BeginRead 会重复调用 ReadCa
  • gjs 如何使用 g_data_input_stream_read_line_async 在 Gnome Shell 扩展中读取套接字流

    我正在尝试编写一个 Gnome Shell 扩展 通过 Socket 服务器与 Arduino 进行通信 服务器和 Arduino 运行良好 但我陷入了监听传入服务器消息的扩展代码 因为我需要一种非阻塞方法 所以使用异步读取行 https
  • 如何查找连接到 AF_INET 套接字的客户端的 UID?

    有什么方法或类似的东西ucred for AF UNIX如果是AF INET插座 TCP在我的例子中 找出连接到我的套接字的客户端的UID 还有 proc net tcp但它显示了UID of the creator插座的而不是连接的cli
  • 为什么没有收到(UDP 多播)数据包?

    所以 我一直试图弄清楚为什么这不起作用 但我没有任何线索 我已经成功地从 iPhone 发送数据包并在 Mac 上接收它们 根据 tcpdump 我的 mac 正确发送数据包 此外 如果我在模拟器中运行它 它工作得很好 这让我相信这是一个网
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • 当使用环回地址使用 TCP/IP 套接字进行 IPC 时,常见的网络堆栈是否会跳过将消息帧封装在较低级别的 PDU 中?

    在某些环境 例如 Java 中 很自然地使用 TCP IP 套接字通过 localhost 地址 IPv4 中的 127 0 0 1 或 IPv6 中的 1 在同一主机上的进程之间传递消息 因为Java倾向于不在其API中公开其他IPC机制
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务

随机推荐