老岳父啊哟唯 发表于 2023-10-11 15:38:57

workerman即时通讯聊天系统

项目地址

HTTP

http协议


[*]超文本传输协议
[*]无状态协议
[*]基于tcp协议的一个应用层的协议
[*]http是单向的,浏览器发起向服务器的连接,服务器预先并不知道

http协议工作过程


[*]客户端和服务端建立连接(三次握手),http开始工作
[*]建立连接后客户端发送给请求服务器
[*]服务器接受到请求后,给予相应的响应信息
WebSoket

websoket协议


[*]websocket是H5提出的在单个TCP协议上进行的全双工通讯协议
[*]实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实事通讯的目的
[*]WebSokcet是一个持久化的协议
工作过程


[*]客户端发送http请求,经过三次握手,建立TCP连接,在http 请求里面存放 websocket 支持的版本号信息
[*]服务器接收请求,同样以http协议回应
[*]连接成功,客户端与服务器建立持久性的连接
websocket 与 http 差异

相同点


都是基于tcp的,都是可靠的性传输协议
不同点


[*]websocket是双向通信协议,模拟socket协议,可以双向发送或接受信息
[*]websocket是持久化连接,http 是短连接
[*]websocket是有状态的,http 是无状态的
[*]websocket 连接之后服务器和客户端可以双向发送数据,http只能是客户端发起一次请求之后,服务器才能返回数据
轮询

过程


[*]客户端发起长轮询,如果服务端的数据没有发生变化,就会 hold 住请求,知道服务端的数据发生变化
[*]优点 是解决了http不能实时更新的弊端,实现了 "伪-长连接"
[*]轮询的本质依然是 requestresponse

弊端


[*]推送延迟
[*]服务端压力
[*]推送延迟和服务端压力无法中和
websocket改进


JS Websocket

简单示例

ws = new WebSocket('ws://127.0.0.1:2000');
//当 websocket 创建成功后 触发onopen事件
ws.onopen = function () {
    var data = {};
    data.type = 'login';
    //标识客户还是客服
    data.group = 'member';
    //发送信息
    ws.send(JSON.stringify(data));
}
//收到服务端发来的消息 触发 onmessage
ws.onmessage = function (e) {
    var data = JSON.parse(e.data);
}Workerman基础

workerman手册
安装

Composer安装:
composer require workerman/workerman
启动停止

# 以debug(调试)方式启动
php start.php start
# 以daemon(守护进程)方式启动
php start.php start -d
# 停止
php start.php stop
# 重启
php start.php restart
# 平滑重启
php start.php reload
# 查看状态
php start.php status简单示例

实例一、使用HTTP协议对外提供Web服务

创建start.php文件
页: [1]
查看完整版本: workerman即时通讯聊天系统