,,IOS之WebSocket框架Starscream案例详解

,,IOS之WebSocket框架Starscream案例详解

本文主要介绍IOS的WebSocket框架红蜘蛛的详细讲解。本文通过一个简单的案例来说明对这项技术的理解和使用。以下是详细内容,有需要的朋友可以参考一下。

传统的网络技术(即Berkeley sockets)被认为是可靠和稳定的。但是Berkeley socket在某些web技术下并不好用,比如代理和防火墙。WebSocket是2011年出现的一种在客户端和服务器之间建立双向通信的新技术。WebSocket比多个HTTP请求更高效,并且允许长连接。

在iOS上使用WebSocket并不是那么容易。而红蜘蛛,iOS和Mac库,大大简化了WebSocket的创建和使用。

注意:本文假设您熟悉CocoaPods。如果不熟悉,可以参考我们的CocoaPods教程。

在本文中,您将在一个名为Emoji Commuicator的应用程序中完成网络编程部分。Emoji Communicator允许您向所有连接到该服务的人发布带有Emoji字符的当前心情。

Emoji Communicator最初的开发者原本打算使用HTTP请求来获取新消息,但显然使用WebSocket来实现该功能更合适。您将使用红蜘蛛连接到后台Web服务器。

开始

首先,你需要一个网络服务器。在本文中,您将在您的计算机上启动一个web服务器。这个示例的web服务器运行在Node.js下,并使用一个小的Javascript文件来支持它。

当然,你需要先安装Node.js。如果不确定是否已经安装,可以在终端窗口中输入命令:

节点版本

如果报错,请按照以下步骤下载安装Node.js,否则会看到Node.js的版本号,下一节可以跳过Node.js的下载。

安装和下载 Node.js

在https://nodejs.org/下载Node.js的最新安装包(目前最新版本为2016.9.22)。下载安装包(例如node-v6.6.0.pkg)后,双击安装。按照提示,只需选择默认选项。

安装完成后,检查Node.js在终端中是否正常工作:

节点版本

如果您没有看到6.6.0(或您安装的版本),或报告错误,请再次检查安装是否正确。

聊天服务器

您将使用聊天服务器。从这里下载示例iOS应用程序和Web服务器代码。将zip包解压缩到桌面或文件夹中。在终端中,切换到这个目录,进入nodeapp子目录。

这个程序需要一个第三方模块,需要用这个目录下Node.js的包管理器npm安装,执行:

npm安装websocket

输入以下命令启动聊天服务器:

节点chat-server.js

您将看到类似如下的输出:

2016年9月13日星期二18:54:44 GMT-0500 (CDT)服务器正在侦听端口1337

然后在Safari或Chrome中打开frontend.html。

输入昵称并发送测试消息。如果您想在第二个客户端上测试,请重新打开浏览器或选项卡,并使用相同的Url。用另一个昵称登录并发送消息;您将看到该消息立即出现在另一个浏览器中。

这充分说明了WebSocket的强大。每个浏览器都有一个单独的与web服务器的长连接。——不刷新。当消息到达时,服务器会自动将它广播给所有连接的客户端。回到终端,您可以看到所有聊天活动:

$ node chat-Server . jstue 2016年9月13日18时54分44秒GMT-0500 (CDT)服务器正在侦听端口1337 tue 2016年9月13日18时55分19秒GMT-0500 (CDT)连接从原点为空。2016年9月13日星期二18:55:19 GMT-0500 (CDT)连接已接受。2016年9月13日星期二18:55:34 GMT-0500 (CDT)用户被称为:绿色Aaron。2016年9月13日星期二18:55:37 GMT-0500 (CDT)收到来自Aaron的消息:hello tue 2016年9月13日18:58:49 GMT-0500 (CDT)来自原点的连接为空。2016年9月13日星期二18:58:49 GMT-0500 (CDT)连接已接受。2016年9月13日星期二18:58:51 GMT-0500 (CDT)用户被称为:红色詹姆斯。2016年9月13日星期二18:58:55 GMT-0500 (CDT)收到来自詹姆斯的消息:这真是太棒了!2016年9月13日星期二18:59:03 GMT-0500 (CDT)收到来自詹姆斯的消息:]2016年9月13日星期二18:59:27 GMT-0500 (CDT)对等未定义断开连接。

WebSockets

HTTP最早出现于1991年,它被设计为一种请求/响应通信机制。Web浏览器可以很好地使用这种机制。用户请求网页,服务器返回内容。但是有时候需要新数据的时候,不需要用户请求就通知用户——,也就是服务器推送。

HTTP协议不能很好的解决推送模式。在websocket出现之前,web services通过一系列的浏览器刷新机制来推送模型,但是效率并不理想。

WebSocket实现了服务器端的推送机制。所有新的网络浏览器都支持WebSocket,这使得它超级容易使用。WebSocket可以打开持久连接,大部分网络都可以轻松处理WebSocket连接。

WebSocket通常用于一些数据变化频繁或频繁的场景。例如,脸书的web通知、Slack的实时聊天以及交易系统中的股票价格变化。

在iOS中使用WebSocket比较麻烦,要做很多设置,内置API根本帮不上忙。这时候红蜘蛛出现了——,一个小巧易用的库,让你所有的烦恼都烟消云散。

Emoji Communicator

打开EmojiTransmitter.xcodeproj在模拟器中运行程序。程序很简单。它要求用户输入一个昵称,然后显示一个界面,允许用户选择一个表情符号来发送和显示任何收到的表情符号。

这个App还没有完成网络部分。您将使用红蜘蛛执行所有WebSocket网络请求。

有很多方法可以将红蜘蛛整合到你的项目中。CocoaPods和Carthage是两个最常见的包管理器。两者都可以使用,但是本文将使用CocoaPods。

首先,关闭打开的项目。打开终端窗口,将目录切换到项目文件夹。此项目中已经有一个用红蜘蛛pod配置的Podfile文件。您可以直接安装pod:

pod回购更新;pod安装

当CocoaPods安装完成后,在Xcode 8中打开文件EmojiTransmitter.xcworkspace。运行程序,检查应用程序是否可以运行。

打开ViewController.swift并在导入UIKit后添加以下内容:

进口红蜘蛛

然后,在ViewController类的username属性后添加一个属性:

var socket=web socket(URL:URL(string:' ws://localhost:1337/')!协议:['聊天'])

这是创建WebSocket连接的核心。注意URL的唱法。协议是ws而不是Http/https。协议参数被指定为chat,这取决于服务器的实现。可以使用或忽略该协议。在这个演示中,忽略它。

然后在viewDidLoad方法后添加:

定义{

socket . disconnect(force time out:0)

socket.delegate=空

}

当视图控制器被销毁时,WebSocket连接被强制关闭。

在红蜘蛛,所有的工作都是委托完成的。红蜘蛛也支持闭包,如果你不想使用委托的话。

在ViewController.swift中,在fileprivate扩展名后添加一个扩展名:

//MARK: - WebSocketDelegate

扩展view controller:WebSocketDelegate {

public func websocketDidConnect(_ socket:红蜘蛛。WebSocket) {

}

public func websocketDidDisconnect(_ socket:红蜘蛛。WebSocket,错误:NSError?) {

}

public func websocketDidReceiveMessage(_ socket:红蜘蛛。WebSocket,text: String) {

}

public func websocketDidReceiveData(_ socket:红蜘蛛。WebSocket,data: Data) {

}

}

这四个委托方法必须实现,否则代码无法编译。

然后,在viewDidLoad方法的super.viewDidLoad()之后,添加:

套接字. delegate=self

socket.connect()

运行程序,输入昵称,然后单击下一步。返回Node.js控制台,您将看到一个连接通知。

现在,您已经能够连接Node.js应用程序,下一步是向服务器发送消息。

首先,将sendMessage(_:)方法修改为:

func sendMessage(_ message:String){

socket.write(字符串:消息)

}

这将向Node.js服务器发送一条消息(在本例中是emoji)。

然后,在websocketDidConnect(_:)方法中,添加:

socket.write(字符串:用户名)

这将在连接建立后发送您在第一个界面中输入的昵称。该服务器会将收到的第一封邮件作为用户名。

将以下内容添加到websocketDidDisconnect(_:错误:):

performSegue(带有标识符:' websocketDisconnected ',发件人:自己)

不管是什么原因,只要断开套接字,这就会将用户返回到昵称输入界面。如果是在自己的App里,这里要多做一些声音错误处理。

然后,在WebSocketDidReceiveMessage(_:text:)方法中:

//1

guard let data=text.data(使用: utf16),

让jsonData=试试?JSON serialization . JSON object(with:data),

设jsonDict=jsonData为?[字符串:任何],

让messageType=jsonDict['type']为?字符串else {

返回

}

//2

如果messageType=='message ',

设messageData=jsonDict['data']为?[字符串:任何],

让message author=message data[' author ']as?字符串,

让message text=message data[' text ']as?字符串{

收到的消息(消息文本,发送者名称:消息作者)

}

接收的文本消息是可读的字符串3354。如果是JSON,尽量把它变成一个集合对象。该代码解释如下:

首先将字符串转换成NSData,然后将NSData传递给JSONSerialization对象,将其转换成一个载体,返回一个有效的对象。最后,检查几个重要的键,并设置相应的值。如果对象无效,直接通过guard语句退出。

筛选消息的messageType,然后将数据传递给messagereceived (messagetext:sendername:)方法。

以下是从Node.js接收的JSON格式的消息示例:

{

类型':'消息',

数据':{

时间':1472513071731,

文本“:]”,

作者':' iPhone模拟器',

颜色':'橙色'

}

}

运行该应用程序,每当你发送消息时,表情符号都会用你选择的表情符号和昵称进行刷新。回到网络控制台,你的表情信息也会显示出来。

这就是红蜘蛛的用处!

结束

在这里下载最终完成的项目。

Emoji Communicator是使用WebSocket最简单的例子。如果想在现有服务中使用红蜘蛛,可以参考更多资料:

参考红蜘蛛在GitHub上的项目主页。

参考Mozilla开发者网上关于WebSocket的介绍,以及如何实现WebSocket。

如果你需要一些让你昏昏欲睡的东西,请阅读RFC 6455,关于WebSocket协议规范。

如果你有任何问题或建议,请在下面留下评论。

关于IOS版WebSocket框架红蜘蛛案例的详细讲解,本文到此为止。关于IOS版WebSocket Framework的红蜘蛛的更多信息,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • nagios监控使用方法,nagios下载
  • nagios监控使用方法,nagios下载,Nagios的安装与使用详细教程
  • ios长截图方法,iOS怎样长截图
  • ios长截图方法,iOS怎样长截图,iOS实现简单长截图
  • ios网络视频播放器,Ios音乐播放器
  • ios网络视频播放器,Ios音乐播放器,iOS利用AVPlayer播放网络音乐的方法教程
  • ios状态栏怎么自定义,ios状态栏图标
  • ios状态栏怎么自定义,ios状态栏图标,iOS中状态栏的基本使用方法汇总
  • ios旋转立体图形游戏,ios 旋转屏幕
  • ios旋转立体图形游戏,ios 旋转屏幕,iOS动画特效之立方体翻转
  • iOS推送延迟,ios消息延迟的解决方法
  • iOS推送延迟,ios消息延迟的解决方法,对比分析iOS延迟执行的4种方式
  • ios build版本号规范,ios version什么意思
  • ios build版本号规范,ios version什么意思,iOS 项目中的version和build 详解
  • 电脑bios没有u盘启动选项怎么办,win10u盘启动bios设置后还是无法启动
  • 留言与评论(共有 条评论)
       
    验证码: