首页 > 其他分享 >WebSocket服务器

WebSocket服务器

时间:2023-02-04 22:13:01浏览次数:52  
标签:websocket swoole server WebSocket 服务器 ws

//创建websocket 服务器  ws_server.php

//https://wiki.swoole.com/wiki/page/479.html

//创建websocket服务器对象,监听0.0.0.0:9502端口
$ws = new swoole_websocket_server("0.0.0.0", 9502);

//监听WebSocket连接打开事件
$ws->on('open', function ($ws, $request) {
    var_dump($request->fd, $request->get, $request->server);
    $ws->push($request->fd, "hello, welcome\n");
});

//监听WebSocket消息事件
$ws->on('message', function ($ws, $frame) {
    echo "Message: {$frame->data}\n";
    $ws->push($frame->fd, "server: {$frame->data}");
});

//监听WebSocket连接关闭事件
$ws->on('close', function ($ws, $fd) {
    echo "client-{$fd} is closed\n";
});

$ws->start();

WebSocket服务器是建立在Http服务器之上的长连接服务器,客户端首先会发送一个Http的请求与服务器进行握手。握手成功后会触发onOpen事件,表示连接已就绪,onOpen函数中可以得到$request对象,包含了Http握手的相关信息,如GET参数、Cookie、Http头信息等。

建立连接后客户端与服务器端就可以双向通信了。

  • 客户端向服务器端发送信息时,服务器端触发onMessage事件回调
  • 服务器端可以调用$server->push()向某个客户端(使用$fd标识符)发送消息
  • 服务器端可以设置onHandShake事件回调来手工处理WebSocket握手
  • swoole_http_server是swoole_server的子类,内置了Http的支持
  • swoole_websocket_server是swoole_http_server的子类, 内置了WebSocket的支持

运行程序

php ws_server.php

可以使用Chrome浏览器进行测试,JS代码为:

var wsServer = 'ws://127.0.0.1:9502';
var websocket = new WebSocket(wsServer);
websocket.onopen = function (evt) {
    console.log("Connected to WebSocket server.");
};

websocket.onclose = function (evt) {
    console.log("Disconnected");
};

websocket.onmessage = function (evt) {
    console.log('Retrieved data from server: ' + evt.data);
};

websocket.onerror = function (evt, e) {
    console.log('Error occured: ' + evt.data);
};
  • 不能直接使用swoole_client与websocket服务器通信,swoole_client是TCP客户端
  • 必须实现WebSocket协议才能和WebSocket服务器通信,可以使用swoole/framework提供的PHP WebSocket客户端

Comet

WebSocket服务器除了提供WebSocket功能之外,实际上也可以处理Http长连接。只需要增加onRequest事件监听即可实现Comet方案Http长轮询。

 

标签:websocket,swoole,server,WebSocket,服务器,ws
From: https://www.cnblogs.com/minch/p/17092505.html

相关文章

  • 服务器cpu100%挖矿程序排查
     现象:服务器cpu占用100%,但是使用top命令又找不出具体的进程,top中显示出来的进程都很正常,如下:  根据经验,很大概率是中病毒了,可能是有挖矿进程入侵服务器了,一般这种......
  • 服务器部署项目-cnblog
    2.项目部署之前我们讲解Linux操作系统时,就提到,我们服务端开发工程师学习Linux系统的目的就是将来我们开发的项目绝大部分情况下都需要部署在Linux系统中。那么在本章节,我......
  • 使用Varnish部署缓存服务器
    一、Varnish介绍1、varnishVarnish是一款高性能、开源的缓存反向代理服务器。它从客户端接受请求,并尝试从缓存中响应请求,如果无法从缓存中提供响应,Varnish向后端服......
  • 998-搭建一台私用服务器全过程
    服务器U盘安装Ubuntu制作一个Ubuntu安装盘DELL服务器F11进入BOOTManager,选择U盘启动按照安装引导安装即可安装过程中两点分区,根据服务器的用途考虑给多少空间,我这里默认创......
  • 二、源码分析(服务器启动事件wss 的startup)
    这节具体看看 websocket-networking 是如何启动startup的从前面知道,必须有个  server-events文件夹constfeatures=[//questgoals/rewardshav......
  • 开放远程端口后服务器日志中很多登录进程NtLmSsp攻击的处理办法
    首先按住键盘“Windows+R”键,在运行窗口输入“secpol.msc”,并点击“确定”进入安全设置》本地策略》安全选项,然后下图两个配置项中二选一即可,按照第一个配置项,则日志彻......
  • 云原生之使用docker部署NTP时间服务器
    (云原生之使用docker部署NTP时间服务器)一、chrony介绍chrony是网络时间协议(NTP)的通用实现。它可以将系统时钟与NTP服务器、参考时钟(例如GPS接收器)以及使用手表......
  • BGP高防服务器与普通高防服务器有什么区别?
        有的企业在为自己的服务案挑选高防服务器的时候,常常​‌‌会接到来自IDC运营商的提问;是选择普通高防服务器,还是选择BGP高防服务器?这时候,很多用户会对BGP高防......
  • gin框架实现websocket并广播消息
    详细实现方式以及代码下载请前往https://www.passerma.com/article/82一、项目预览二、安装gin框架gogetgithub.com/gin-gonic/gin三、安装gorilla/websocket库goget......
  • SSRF 服务器端请求伪造
    0x01定义SSRF(Server-SideRequestForgery:服务器端请求伪造)是一种由攻击者构造,形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内......