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
成功启动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操作的时候,你会发现正在运行的服务端会打印出消息内容
是的,只要有打印操作都会在这里显示
切记,不要使用exit()或者die()函数,这个函数会把socket进程中止掉
如果你改了一次客户端的代码,记得重启一下socket
php ws_server.php restart
就差不多介绍到这里,如果能看懂就说明有一定了解了
如果想深入,直接啃文档和demo