php部分:
<?php use Workerman\Worker; //use Workerman\Autoloader; require_once __DIR__ . '\Workerman\Autoloader.php'; // 创建一个Worker监听2345端口,使用http协议通讯 $worker = new Worker("websocket://0.0.0.0:2727"); // 启动4个进程对外提供服务 $worker->count = 1; $uid = 0; //当客户端连上来时 $worker->onConnect = function($connection){ global $ws_worker, $uid; //为这个链接分配一个uid $connection->uid = ++$uid; }; //当客户端发送消息过来时,转发给所有人 $worker->onMessage = function($connection, $data) { global $worker; foreach($worker->connections as $conn) { $conn->send("user_{$connection->uid} said: $data"); } }; //当客户端断开时,广播给所有客户端 $worker->onClose = function ($connection){ global $worker; foreach($worker->connections as $conn) { $conn->send("user_{$connection->uid} logout"); } }; // 运行worker Worker::runAll();
html部分:
<html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>aaaaa</title> </head> <body> <div id="app"> <ul> <li v-for="message in messages">{{message}}</li> </ul> <form @submit.prevent="onSubmit"> <input type="text" v-model="content"> <input type="submit"> </form> </div> <script src="https://cdn.jsdelivr.net/npm/vue"></script> <script> var ws = new WebSocket("ws://127.0.0.1:2727"); var app = new Vue({ el:"#app", data:{ messages:[], content:'' }, created:function(){ ws.onmessage = function(e){ this.messages.push(e.data); }.bind(this); }, methods:{ onSubmit:function(){ ws.send(this.content); } } }) </script> </body> </html>