Tag: Socketio

在iOS Swift 3中使用socket.io

通常,大多数iOS / Android应用程序都与服务器通信以交换数据。 服务器实现并提供RESTful API,应用程序可使用该API进行通信。 当应用需要将数据发送到服务器或从服务器获取数据时,它会发出正确的请求,并在一段时间后返回数据。 在应用运行期间,这种情况会发生多次。 幸运的是,当有必要立即从服务器接收数据时(每次这些数据可用时),而无需让应用程序向服务器发送任何请求, socket.io是更好的解决方案。 传统上,使用流行的Web应用程序堆栈(例如LAMP)编写实时应用程序非常困难,这涉及轮询服务器的更改,跟踪时间戳,并且比预期的要慢得多。 Socket.IO是一个用于实时Web应用程序(即时通讯程序,推送通知,在线游戏)的JavaScript库。 传统上,套接字是围绕其构建大多数实时系统的解决方案,可在客户端和服务器之间提供双向通信通道。 这意味着服务器可以将消息推送到客户端。 每当发生事件时,其想法是服务器将获取该事件并将其推送到相关的已连接客户端。 它使开发人员可以发送和接收数据,而不必担心跨浏览器的兼容性。 套接字通信依赖于客户端-服务器逻辑,其中服务器与客户端之间始终存在持久连接。 更准确地说,服务器“打开”一个专用端口,客户端可以通过该端口连接到该端口。 一旦发生这种情况,所有连接的应用程序都可以将消息发送到该端口(外发消息),并侦听任何传入消息。 由于这是连接到套接字时的默认行为,因此服务器上的每个已连接客户端都将自动获取其消息,而无需任何其他请求。 最重要的是,当服务器将消息发送到该端口时,收件人客户端将立即收到该消息,因此它们可以立即采取任何进一步的措施(例如,更新新闻提要)。 尽管Socket.IO主要是为Web应用程序设计的,但它提供了iOS的库| Android | 可以立即集成到项目中的Java 。 工作流程 首先,我创建了SocketIOManager的单例对象,该类的单个实例将由整个应用程序使用。 在本例中,SocketIOClient需要将socketURL作为参数http://demo.yourdomain.com:3000 。 socket . on(clientEvent: . connect) {data, ack in … 客户端连接时发出。 这也称为成功重新连接。 连接事件获得一个数据项:已连接到的名称空间。 open func emit(_ event: String, with items: [Any]) 将事件和可选数据项发送到服务器 。 通过管理器创建的套接字由管理器保留。 客户端成功连接到套接字后,我们使用套接字的emit方法将数据发送到服务器。 因此,至少必须维护对管理器的单个强烈引用才能使套接字保持活动状态。 为了连接到套接字,请调用socket.connect()并 […]

使用Socket.IO和MySQL和Node.js在iOS Swift 4中进行实时更新

在线上的许多示例演示了实时聊天室的强大功能。 虽然这是Socket.IO的绝佳应用程序,但是当通过API更改数据时,我们也可以使用Socket.IO来向Web或移动应用程序发出信号以进行更新。 如果您正在寻找一种使用关系数据库的解决方案,而该数据库不是太抽象,而是可以提供更大的灵活性,那么它可以是Realm或Firebase之类的绝佳选择。 在此示例中,我们将开发一个简单的iOS Swift 4应用程序,当通过简单的API在我们的关系数据库中更改数据时,该通知将得到通知。 可以在这里找到所有服务器和iOS代码: https : //github.com/smifsud/realtime 这些是我们将要执行的步骤: 创建带有一些示例内容的本地Node和MySQL服务器。 在Node.js中创建一个简单的API,该API将接受用户标识符(令牌)并返回关联的数据 通过存储在数组中*捕获服务器上的客户端令牌和套接字ID * 更新表API。 当发生任何变化时。 属于该新闻组的所有已连接令牌将通过带有唯一名称空间(令牌),socketID和事件名称的消息发出通知 iOS更新。 捕获事件并更新应用。 在我们的假设应用程序中,有新闻组,某些用户可以访问其中包含来自不同新闻媒体的标题的新闻组。 在我们的iOS应用中,我们将有一个包含相关标题的UITableView。 通过我们的简单API进行更改时,服务器端功能将检查服务器以查找与更改后的数据之间的关系,如果存在实时连接(socket.IO连接),服务器将向该特定对象发出事件客户端连接和与用户ID关联的用户令牌。 *在我们的示例中,我们将要注意套接字ID。 我发现许多教程都没有提到这一点,但是应该考虑到这一点。 例如,当使用诸如socket.on Any之类的命令时,即使没有订阅特定的应用程序,应用程序仍然可以拾取通过网络发出的消息。 除了指定名称空间之外,我们还希望指定套接字的IO ID ,以便在调用过程中有效地发送一条消息,并确保并非每个客户端在传输可能会传输的任何活动期间都收到ping。与我们的特定用户无关。