• 你绝对想象不到的端对端通信的几种方式


    一、前言
    今天要和大家说的是我们常用的一些端对端的通信方式,这里我们会以python和php语言为主,举例说明客户端、浏览器端和服务器端通信,部分代码可能展示不全,不过我会放在文末链接供大家下载测试,下面我们先来让大家看看今天有哪些主题。

    1、tcp
    2、udp
    3、ajax
    4、websocket
    5、sse
    下面我们将从这几个方面一起来深入了解下这几种技术的实现方法。

    二、TCP
    1、Python版本:
    首先来写服务器端,文件名为server.py,内容如下:

    再来看看客户端,文件名为client.py,内容如下:

    我们来看看运行结果,如下:

    可以看到,接收发送信息都能实现,而且客户端下线了还有通知。

    2、PHP版本
    PHP想要进行TCP通信,我们得开启socket扩展,打开php目录下的php.ini文件,改动一处即可,如下:

    开启后即可使用socket功能。得先首先还是服务器端代码,文件名为server.php,内容如下:

    接下来是客户端,文件名为client.php,内容如下:

    我们来看下结果,如下:

    其实,php除了这种方式可以访问TCP连接外,还有两种方法,一种是fsockopen,还有一种是stream_socket_client,这里我们得服务器端代码不变,只对访问服务器端的客户端代码进行一些变动即可。

    1).fsockopen

    2).stream_socket_client

    三、UDP
    讲完了TCP,咱们再来说说UDP,这是一种不可靠的传输协议,但是速度快,这是它有别于TCP的地方,因此它比TCP更简单,实现一个UDP实例,代码会比前者少,下面我们一一来实现。

    1、Python版本
    先还是服务器端,文件名为server.py,内容如下:

    其次是客户端,文件名为client.py,内容如下:

    我们来看下运行结果如下:

    2、PHP版本
    先看服务器端的代码,文件名为server.php,内容如下:

    再来看看客户端的代码,文件名为client.php,内容如下:

    最后我们来看看执行结果,如下:

    PHP的UDP通信和TCP一样,也有三种,上面我们介绍了一种,还有两种我们来一一介绍。

    1).fsockopen
    先来看看服务器端代码,文件名为server.php,内容如下:

    再来看看客户端代码,文件名为client.php,内容如下:

    2).stream_socket_client
    这两种方法的的服务端是一样的,唯一的区别就是客户端有一点小小的区别,因此这里就不放服务端的代码了,只放客户端代码,如下:

    我们来看看结果,如下:

    四、AJAX
    这应该算是我们比较熟悉的服务器端和浏览器端交互的方式了吧,而且为了方便一般都会使用jQuery去实现,有时候也会用原生的XMLHttpRequest,这里我们针对这两种方法一一实现。

    1、Python版本
    这里python版本的ajax我们使用flask实现会比较容易一些。

    1).XMLHttpRequest

    2).Jquery

    下面来看下两者的运行结果,如下:

    2、PHP版本
    1).XMLHttpRequest

    2).Jquery

    下面来看下运行结果,如下:

    五、websocket
    1、Python版本
    这里有两个版本,一个是原生的,利用socket模块,实现比较复杂,还有一种是利用模块,比较简单,下面我们一一介绍下。

    1).原生
    原生的话,会麻烦许多,主要是对服务器端的数据进行处理,如下:

    下面来看下结果,如图:

    2).模块
    运用现有的websocket模块会比原生的简单很多,如图:

    2、PHP版本
    php也有原生和框架两个版本,下面我们来一一说明一下。

    1).原生

    2).workerman

    六、SSE
    1、Python版本

    2、PHP版本

    然后再cmd中运行PHP内置服务器,如下:

    七、总结
    以上就是比较常用的通信方式,其实每个编程语言基本上都可以实现,这里小编选择了两种比较熟悉的语言来进行举例,希望能帮到大家,以上所有代码如下:

    Ajax
    python:
    https://url25.ctfile.com/f/34512525-740232809-e73a05?p=7054 (访问密码: 7054)

    php:
    https://url25.ctfile.com/f/34512525-740232808-2075d7?p=7054 (访问密码: 7054)

    tcp
    python:
    https://url25.ctfile.com/f/34512525-740232796-eb04d1?p=7054 (访问密码: 7054)

    php:
    https://url25.ctfile.com/f/34512525-740232792-1e4408?p=7054 (访问密码: 7054)

    udp
    python:
    https://url25.ctfile.com/f/34512525-740232786-8e234a?p=7054 (访问密码: 7054)

    php:
    https://url25.ctfile.com/f/34512525-740232785-57bcbc?p=7054 (访问密码: 7054)

    websocket
    python
    原生:
    https://url25.ctfile.com/f/34512525-740232779-a4aa14?p=7054 (访问密码: 7054)

    模块:
    https://url25.ctfile.com/f/34512525-740232778-9a8440?p=7054 (访问密码: 7054)

    php
    原生:
    https://url25.ctfile.com/f/34512525-740232781-f7ddd4?p=7054 (访问密码: 7054)

    框架:
    https://url25.ctfile.com/f/34512525-740232780-ca7fce?p=7054 (访问密码: 7054)

    sse
    python:
    https://url25.ctfile.com/f/34512525-740232774-27c899?p=7054 (访问密码: 7054)

    php:
    https://url25.ctfile.com/f/34512525-740232772-de8947?p=7054 (访问密码: 7054)

  • 相关阅读:
    webpack output.library的16 种取值方法示例
    Linux磁盘挂载解挂硬盘
    【MCAL_CANDriver】-1.5-图解CANFD如何兼容经典Classical CAN 2.0及其解决方案
    kubernetes中的静态POD
    初探Hessian利用链为Dubbo-CVE占坑
    前端设计模式应用
    Mysql.慢Sql
    这波水文章
    Yakit工具篇:爆破与未授权检测的使用
    【C++】哈希——哈希的概念,应用以及闭散列和哈希桶的模拟实现
  • 原文地址:https://blog.csdn.net/weixin_30852573/article/details/128177674