天天看点

php workerman 入门(webSocket)

webSocket肯定很多人头疼,刚开始接触http,现在要了解一个新的连接方式。

下面来简单介绍一些基础知识,从不会到会。

由于现在有很多很好用的socket框架,本着不浪费生命重复造轮子的原则,下面是通过workerman的例子来介绍。

你要有个php环境,安装composer,不会的可以看一下我之前的文档,基本上麻瓜式敲一遍下来就ok了。

第一步,下载workerman类

composer require walkor/workerman
           

第二步,根据文档给的例子去理解

http://doc.workerman.net/getting-started/simple-example.html

在vendor同级目录下创建一个ws_server.php文件

<?php
use Workerman\Worker;
// 这里要引对路径
require_once __DIR__ . '/vendor/Workerman/Workerman/Autoloader.php';

// 这里记得要把服务器防火墙端口开起来。并且可以从文档上的例子可以看出有三种协议,目前只举ws协议
$ws_worker = new Worker("websocket://0.0.0.0:2000");

// 启动4个进程对外提供服务
$ws_worker->count = 4;

// 当收到客户端发来的数据后返回hello $data给客户端
$ws_worker->onMessage = function($connection, $data)
{
    // 这里进行业务处理,分支等拓展
    var_dump($data);
    // 向客户端发送消息
    $connection->send('服务端已收到数据');
};

// 运行worker
Worker::runAll();
           

在服务器运行代码

php ws_server.php start
           
php workerman 入门(webSocket)

成功启动webSocket服务端

接下来,就是模拟一个客户端来向服务端发送信息

打开浏览器的F12,console下敲入(或者写成js)

// 假设服务端ip为192.168.33.10
ws = new WebSocket("ws://192.168.33.10:2000");
ws.onopen = function() {
alert("连接成功");
	
// 模拟消息内容
var param = {
	test:1,
	content:2,
}
// 向WS服务器发送一个消息
ws.send(JSON.stringify(param));

// 接收WS服务器返回的消息
ws.onmessage = function(e){
	console.log(e.data);
}

// 主动断开长连接
ws.close();
ws.onclose = function(){
	alert('已断开')
}
           

在ws.send操作的时候,你会发现正在运行的服务端会打印出消息内容

php workerman 入门(webSocket)

是的,只要有打印操作都会在这里显示

切记,不要使用exit()或者die()函数,这个函数会把socket进程中止掉

如果你改了一次客户端的代码,记得重启一下socket

php ws_server.php restart
           

就差不多介绍到这里,如果能看懂就说明有一定了解了

如果想深入,直接啃文档和demo