在PHP中简单理解的socket随笔

本文主要是对没有基础或者有一点基础的PHPer的技术分享,大牛(觉得我写的有误的)有幸看到可以评论指点一下,万分感谢!

随着我们个人技术的成长,项目的要求,可能在开发中会用到实时更新,或者聊天室的一些模块,所以在技术方面就会用到socket来实现这些模块。下面就简单来说说自己的理解。

首先来说说socket的使用场景:(手游)聊天室,消息推送,数据转发,代&理,游戏服务器。我自己有实践过聊天室,消息推送,数据转发。但是后两者就没有‘玩过’了。可能之后会做个小游戏玩玩,那都是后话了。

说说什么是socket吧

socket是网络通信协议中的应用层与TCP/IP协议通信的中间软件的抽象层,他是一组接口,在设计模式中,socket是一个门面模式,把复杂的TCP/IP协议隐藏在socket接口的后面。

感谢图作者

工作原理:socket的通信需要服务端和客户端组成;服务端:先初始化Socket,然后与端口绑定(bind),对端口进行监听(listen),调用accept阻塞,等待客户端连接;客户端:客户端初始化一个socket,然后连接服务器,如果连接成功,这时客户端与服务器端的连接就建立了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,一次交互结束。

原理图

所以通过上面,socket就是要我们自己创建服务端和客户端。
常用的socket的函数列出一些,大家可以根据常用的去查用法,我就不在这里列出用法了。
总结下常用的socket函数
服务端:
socket_create 创建socket设置基本参数
socket_bind 绑定ip和端口号
socket_listen 监听
socket_accept 客户端的连接
socket_read 读取客户端的数据
socket_write 给单独客户端发送数据
socket_close 关闭连接
客户端:
socket_create 创建socket设置基本参数
socket_connect 连接socket
socket_write 给服务端发送数据
socket_read 读取服务端数据
socket_close 关闭连接

建立的链接code在本文后面附的github地址,因为是使用的laravel框架,具体使用方法在地址
https://github.com/HH8023/study/tree/master/node_laravel
在最后说一个相关的面试题:
进程间通讯的方式有哪些,各有什么优缺点:
1)管道:管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程之间使用。进程的亲缘关系通常是指父子进程关系。
2)有名管道(FIFO):有名管道也是半双工的通信方式,但是允许在没有亲缘关系的进程之间使用,管道是先进先出的通信方式。
3)信号量:信号量是一个计数器,可以用来控制多个进程对共享资源的访问。它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源。因此,主要作为进程间以及同一进程内不同线程之间的同步手段。
4)消息队列:消息队列是有消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。
5)信号 ( sinal ) :信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生。
6)共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问。共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的。它往往与其他通信机制,如信号量,配合使用,来实现进程间的同步和通信。
7)套接字( socket ) :套接字也是一种进程间通信机制,与其他通信机制不同的是,它可用于不同机器间的进程通信。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 5,192评论 0 8
  • 文章首发于个人blog欢迎指正补充,可联系lionsom_lin@qq.com原文地址:《网络是怎样连接的》阅读整...
    Lucus_Linx阅读 14,461评论 6 31
  • 一、前言 IM发展至今,已是非常重要的互联网应用形态之一,尤其移动互联网时代,它正以无与论比的优势降低了沟通成本和...
    Sky109阅读 4,408评论 1 59
  • 网络编程 一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运...
    go以恒阅读 2,243评论 0 6
  • 1.这篇文章不是本人原创的,只是个人为了对这部分知识做一个整理和系统的输出而编辑成的,在此郑重地向本文所引用文章的...
    SOMCENT阅读 13,358评论 6 174

友情链接更多精彩内容