首页 > 编程知识 正文

bs架构与cs架构的区别,bs和cs架构的区别

时间:2023-05-06 17:02:12 阅读:189727 作者:1833

socket原理与web socket、http的区别:

/的系统通常使用http协议进行客户和服务器业者的信息交换,/的系统通常使用套接字协议进行信息交换

参考: https://blog.csdn.net/QQ39813400/article/details/106721810

插座原理:

服务器端有一个在指定端口上等待客户连接的过程或多个过程。 服务程序等待客户的连接信息,连接后即可按照设计的数据交换方法和格式进行数据传输。 客户端在必要时发出连接到服务器端的请求。

例如,/的系统通常使用http协议进行客户和服务器业者的信息交换,/的系统通常使用socket协议进行信息交换

socket、websocket和http的区别

套接字是TCP/IP进程间通信的基础安装bai。 (当然,套接字是杜氏IPC之一,除此之外,还有消息队列、信号量、dao内存共享等多种手段)。

http(s)是封装在套接字之上的上层通信协议,具有以下特点:

服务端监听通信,被动提供服务的客户端主动向服务端发出连接请求,建立通信。

每次交互时,客户端都主动发起请求,服务端被动响应。

服务端无法主动向客户端推送数据。

通信的数据基于文本格式。 二进制数据(例如图像等)通过base64等手段转换为文本后进行传输。

websocket还是封装在socket之上的上层通信协议,具有以下特点:

websocket通信的建立阶段依赖于http协议。 第一个握手阶段是http协议,握手完成后切换到web套接字协议,并完全脱离了http协议。

在建立通信时,客户端也主动发起连接请求,服务端被动监听。

通信一旦建立,通信就进入“全双工”模式。 这意味着服务端和客户端可以随时自由发送数据,非常适合于服务端主动推送实时数据的业务场景。

交互模式不再是“请求响应”的模式,而是开发者自己设计通信协议。

的数据基于“帧”,可以传输文本数据,也可以直接传输二进制数据,非常高效。 当然,开发人员还必须考虑包装、开箱和编号等技术细节。

编程步骤

(1)服务器端

加载套接字库并创建套接字(wsa startup/socket ) );

将套接字绑定到一个IP地址和一个端口(bind );

将套接字设置为监听模式并等待连接请求。 (列表) );

当请求到来时,接受连接请求,返回与此次连接对应的新套接字(accept ) );

在返回的套接字上与客户端通信(send )/recv );

返回,等待其他连接请求;

关闭套接字并关闭加载的套接字库(closesocket(/wsacleanup ) );

()客户端

加载套接字库并创建套接字(wsa startup/socket ) );

连接到服务器的请求(connect ();

与服务器的通信(send ()/recv ) );

关闭套接字并关闭加载的套接字库(closesocket(/wsacleanup ) );

web插座的优点

传输速度受到很多影响。 可以从多个角度比较HTTP和web套接字。

从纯粹的字节数的观点来考虑

HTTP :每次数据传输都需要HTTP头。 磁头的大小从几百到几千不等。

WebSocket在连接时只需要发送一个HTTP请求,之后就不需要发送繁杂的HTTP报头信息,仅字节数就减少了很多。 另外,在关闭WebSocket的期间,也不需要像建立握手时那样繁杂,发送特定的字节码08的关闭帧即可,服务器侧需要在接收到后响应关闭帧发送到客户端。

从请求数量的角度考虑

通常,当我们请求多个数据时,经常会发生多次HTTP请求。 整个过程包括建立连接和关闭连接。 特别是建立连接所需的时间在整个传输时间中也占比较大的比例。 HTTP长连接的缺点也在上面进行了说明。

WebSocket可以始终保持连接,并通过套接字通道传输数据,从而节省建立连接所需的时间。

从服务器同时执行数的观点来考虑

要使服务器同时保持大量连接打开,需要能够以低性能开销接收高并发数据的架构。 此类体系结构通常围绕线程或所谓的无阻塞IO进行设计。 这不同于传统服务以HTTP请求/响应周期为中心的设计。 这个时候,想想nodejs吧。 通过使用事件机制和异步IO处理请求,提高了服务的并发性,减少了线程切换带来的开销。

Java引入了一种新的I/O API,称为非阻塞/。 每次在服务器端建立新的HTTP连接时,API都会使用选择器来避免绑定线程。 数据到达后,将接收事件,并分配线程处理请求。 因为

此,这种做法被称为每个请求一个线程(thread-per-request)模式。其允许web服务器,比如说WebSphere和Jetty等,使用固定数量的线程来容纳并处理越来越多的用户连接。在相同硬件配置的情况下,在这一模式下运行的web服务器的伸缩性要比运行在每个连接一个线程(thread-per-connection)模型下的好得多。

每个连接一个线程模式通常会有一个更好的响应时间,因为所有的线程都已启动、准备好且是等待中,但在连接的数目过高时,其会停止提供服务。在每个请求一个线程模式中,线程被用来为到达的请求提供服务,连接则是通过一个NIO选择器来处理。响应时间可能会较慢一些,但线程会回收再用,因此该方案在大容量连接方面有着更好的伸缩性。

而WebSocket对于服务端的优势就在于Socket减少了数据传输和处理的成本,使得这些异步的IO机制能够充分地扬长避短。

换句话说,WebSocket带来的并发能力提升,不仅仅因为传输机制本身,服务端一样需要做调整来适应新的机制,这样才能充分发挥WebSocket的优势。

如何使用Jmeter进行Socket测试:
传送门:
https://jingyan.baidu.com/article/ceb9fb1067d84a8cad2ba03d.html
————————————————
版权声明:本文为CSDN博主「tester_sz」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39813400/article/details/106721810

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。