.NET的socket服务器端框架将支持自定义协议

.NET的socket服务器端框架将支持自定义协议,第1张

近日 作为 NET语言为数不多的socket服务器端框架 SuperSocket又进行了几次比较大的重构 扩展性又将得到进一步提升 不久 SuperSocket将会支持自定义协议的功能 内嵌包括命令行格式协议和终止符格式协议 用户也可以定制开发符合自己项目需求的协议 lishixinzhi/Article/program/net/201311/11772

我们都知道socket是套接字,描述ip地址和端口,它本身并不是协议,而是一个调用接口,为了大家直接使用更底层的协议(TCP或UDP),是对TCP/IP 或 UDP/IP的封装。socket处于网络层中的第五层,是一个抽象层。websocket是一个协议,是基于http协议的,是建立在TCP连接之上的,是应用层上的一个应用层协议,和socket不是一个概念。

websocket可以传输文本和二进制。

websocket的协议头是ws开头的,并不是http。

在iOS 平台上,我们知道socket的开源框架有 CocoaAsyncSocket , 而websocket的框架有Facebook的 SocketRocket , 以及 socket.io-client-swift。

使用cocoapods集成

创建方法

这里要特别注意格式

如果服务器使用的框架是socket.io,客户端和服务器进行连接,客户端实现了SRWebSocketDelegate的代理方法后,并没有在打开成功的方法中实现回调,而是直接实现了关闭的(didCloseWithCode)回调,打印的结果如下:

那么 这里的url就应该再进行一下参数拼接了

遵守SRWebSocketDelegate协议并实现代理方法

接收消息的代理方法是必须实现的,要不然就crash了

下面的代理方法展示的是,当前websocket的连接状态,open,fail,close,receivePong

关于 didReceivePong方法的理解

使用webSocket时,最好建立一个心跳包,用于每隔一段时间(5s也好十几秒也好)通知一次服务端,告诉服务器,客户端还活着,这就是一个ping消息。然后呢,服务器返回给客户端一个pong消息,这个pong消息呢,就在 didReceivePong 这个代理方法中去接收。

客户端发送消息的方法:

在发送信息的时候,要和服务器进行商量,格式是什么样的,如果格式不对的话,每发送一次,websocket都会关闭一次,这就很蛋疼了。

发送消息的时候,最好是创建一个模型 ->转字典->转data->转成字符串。最后发送给服务器的就是这个字符串了。

在接收到消息didReceiveMessage的方法中,再把服务器传过来的数据,转换成模型,方便使用。

学会了简单的使用socketRocket之后呢,最好封装一个工具类,来进行统一的管理,外界方便使用调用。需要注意的事,在封装的过程中,要定义一个属性state,表示websocket的连接状态,是关闭?连接中?已连接?连接错误?系统关闭?用户关闭?接收到信息等。根据实际的需求去做一些相应的处理。

可以选择Netty。Netty是基于Java NIO client-server的网络应用框架,使用Netty可以快速开发网络应用,例如服务器和客户端协议。Netty提供了一种新的方式来开发网络应用程序,这种新的方式使它很容易使用和具有很强的扩展性。Netty的内部实现是很复杂的,但是Netty提供了简单易用的API从网络处理代码中解耦业务逻辑。Netty是完全基于NIO实现的,所以整个Netty都是异步的。

网络应用程序通常需要有较高的可扩展性,无论是Netty还是其他的基于Java Nio的框架,都会提供可扩展性的解决方案。Netty中一个关键组成部分是它的异步特性,本片文章将讨论同步(阻塞)和异步(非阻塞)的IO来说明为什么使用异步代码解决扩展性问题以及如何使用异步。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/217667.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-06
下一篇2023-04-06

发表评论

登录后才能评论

评论列表(0条)

    保存