<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> </head> <body> <h1>singwa-swoole-ws测试<h1> <script> var wsUrl = "ws://singwa.swoole.com:8812"; var websocket = new WebSocket(wsUrl); //实例对象的onopen属性 websocket.onopen = function(evt) { websocket.send("hello-sinwa"); console.log("conected-swoole-success"); } // 实例化 onmessage websocket.onmessage = function(evt) { console.log("ws-server-return-data:" + evt.data); } //onclose websocket.onclose = function(evt) { console.log("close"); } //onerror websocket.onerror = function(evt, e) { console.log("error:" + evt.data); } </script> </body> </html>
<?php /** * Created by PhpStorm. * User: baidu * Date: 18/3/1 * Time: 下午11:45 */ $server = new swoole_websocket_server("0.0.0.0", 8812); //$server->set([]); $server->set( [ 'enable_static_handler' => true, 'document_root' => "/home/work/hdtocs/swoole_mooc/data", ] ); //监听websocket连接打开事件 $server->on('open', 'onOpen'); function onOpen($server, $request) { print_r($request->fd); } // 监听ws消息事件 $server->on('message', function (swoole_websocket_server $server, $frame) { echo "receive from {$frame->fd}:{$frame->data},opcode:{$frame->opcode},fin:{$frame->finish}\n"; $server->push($frame->fd, "singwa-push-secesss"); }); $server->on('close', function ($ser, $fd) { echo "client {$fd} closed\n"; }); $server->start();
<?php /** * ws 优化 基础类库 * User: singwa * Date: 18/3/2 * Time: 上午12:34 */ class Ws { CONST HOST = "0.0.0.0"; CONST PORT = 8812; public $ws = null; public function __construct() { $this->ws = new swoole_websocket_server("0.0.0.0", 8812); $this->ws->set( [ 'worker_num' => 2, 'task_worker_num' => 2, ] ); $this->ws->on("open", [$this, 'onOpen']); $this->ws->on("message", [$this, 'onMessage']); $this->ws->on("task", [$this, 'onTask']); $this->ws->on("finish", [$this, 'onFinish']); $this->ws->on("close", [$this, 'onClose']); $this->ws->start(); } /** * 监听ws连接事件 * @param $ws * @param $request */ public function onOpen($ws, $request) { var_dump($request->fd); if($request->fd == 1) { // 每2秒执行 swoole_timer_tick(2000, function($timer_id){ echo "2s: timerId:{$timer_id}\n"; }); } } /** * 监听ws消息事件 * @param $ws * @param $frame */ public function onMessage($ws, $frame) { echo "ser-push-message:{$frame->data}\n"; // todo 10s $data = [ 'task' => 1, 'fd' => $frame->fd, ]; //$ws->task($data); swoole_timer_after(5000, function() use($ws, $frame) { echo "5s-after\n"; $ws->push($frame->fd, "server-time-after:"); }); $ws->push($frame->fd, "server-push:".date("Y-m-d H:i:s")); } /** * @param $serv * @param $taskId * @param $workerId * @param $data */ public function onTask($serv, $taskId, $workerId, $data) { print_r($data); // 耗时场景 10s sleep(10); return "on task finish"; // 告诉worker } /** * @param $serv * @param $taskId * @param $data */ public function onFinish($serv, $taskId, $data) { echo "taskId:{$taskId}\n"; echo "finish-data-sucess:{$data}\n"; } /** * close * @param $ws * @param $fd */ public function onClose($ws, $fd) { echo "clientid:{$fd}\n"; } } $obj = new Ws();
本文来自博客园,作者:孙龙-程序员,转载请注明原文链接:https://www.cnblogs.com/sunlong88/p/8996473.html