html<!DOCTYPE html>
<html>
<head>
<title>HTML5</title>
<meta charset='utf-8' />
<script src='/p
html
<!DOCTYPE html> <html> <head> <title>HTML5</title> <meta charset="utf-8" /> <script src="/public/admin/js/jquery.min.js"></script> <script> $(function() { var socket; var readyState = ["connecting", "connected", "closing", "closed"]; /* 打开连接事件 */ $("button:eq(0)").click(function() { try { /* 连接 */ socket = new WebSocket("ws://192.168.56.1:2345"); /* 绑定事件 */ socket.onopen = function() { $("#msg").html("连接成功..."); }; socket.onmessage = function(e) { $("#msg").html($("#msg").html() + "<br />" + e.data); }; socket.onclose = function() { $("#msg").html($("#msg").html() + "<br />关闭连接..."); }; } catch(exception) { $("#msg").html($("#msg").html() + "<br />有错误发生"); } }); /* 发送数据事件 */ $("button:eq(1)").click(function() { /* 检查文本框是否为空 */ if($("#data").val() == "") { alert("请输入数据!"); return; } try { socket.send($("#data").val()); $("#msg").html($("#msg").html() + "<br />发送数据:" + $("#data").val()); } catch (exception) { $("#msg").html($("#msg").html() + "<br />发送数据出错"); } /* 清空文本框 */ $("#data").val(""); }); /* 断开连接 */ $("button:eq(2)").click(function() { socket.close(); }); }); </script> </head> <body> <h1>WebSocket示例</h1> <input type="text" id="data" /> <button>打开连接</button> <button>发送数据</button> <button>关闭连接</button> <p id="msg"></p> </body> </html>
php
<?php use Workerman\Worker; require_once '../Workerman/Autoloader.php'; // 创建一个Worker监听2345端口,使用http协议通讯 $ws_worker = new Worker("websocket://0.0.0.0:2345"); //启动4个进程对外提供服务 $ws_worker->count = 4; $ws_worker->onWorkerStart = function($worker) { echo "Worker starting...\n"; }; //当接收到客户端发来的数据后显示数据并回发到客户端 $ws_worker->onMessage = function($connection, $data) { global $ws_worker; //显示数据 echo "you just received: $data\n"; //向客户端回发数据 if(!isset($connection->uid)) { // 没验证的话把第一个包当做uid(这里为了方便演示,没做真正的验证) $connection->uid = $data; /* 保存uid到connection的映射,这样可以方便的通过uid查找connection, * 实现针对特定uid推送数据 */ $ws_worker->uidConnections[$connection->uid] = $connection; return $connection->send('login success, your uid is ' . $connection->uid); } // uid 为 all 时是全局广播 list($recv_uid, $message) = explode(':', $data); // 全局广播 if($recv_uid == 'all') { broadcast($message); } // 给特定uid发送 else { sendMessageByUid($recv_uid, $message); } }; // 向所有验证的用户推送数据 function broadcast($message) { global $ws_worker; foreach($ws_worker->uidConnections as $connection) { echo '1/'; $connection->send($message); } } // 针对uid推送数据 function sendMessageByUid($uid, $message) { global $ws_worker; if(isset($ws_worker->uidConnections[$uid])) { $connection = $ws_worker->uidConnections[$uid]; $connection->send($message); } } // 运行worker Worker::runAll(); ?>
可以单独给某个用户发信息,又可以给全部人发信息
评论列表
发表评论
热评文章
相关阅读